18 个解决方案
#1
code please
#2
顶下,等解答
#3
protected Graphics graphics;
protected float m_Scale = 1F;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// Don't paint background
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.graphics = e.Graphics;
this.graphics.Clear(this.BackColor);
OnDraw();
}
这是自定义控件的代码,有好的解决办法没?
#4
你缩放的要求具体是什么?要不要随着窗口大小缩放,这样winform下面用panel来搞了。让你的控件填充panel控制panel试下
#5
只是缩放控件,窗口大小不变。
#6
你是想说点击这个自定义控件是按钮会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
#7
你是想说点击这个自定义控件时它会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
#8
是后者!
#9
这个页面有很多这种自定义的控件,调用的时候不能一个一个调用缩放函数吧?
#10
OnDraw();是你实现缩放的函数是吧?
如果是这样:
你在button事件中调用 自定义控件的.Invalidate()函数使控件区域无效导致重新绘制;
如果是这样:
你在button事件中调用 自定义控件的.Invalidate()函数使控件区域无效导致重新绘制;
#11
你可以定义一个自定义控件管理类 CustomerControlManager 在里面定义Add Remove什么的,再定义一个Update函数里面就遍历所有自定义控件的Invalidate();
#12
因为你发的代码有限,所以很多情况都是我猜测的,你可以发相对完整的代码上来,比如调用方的
#13
因为你发的代码有限,所以很多情况都是我猜测的,你可以发相对完整的代码上来,比如调用方的
这是一个抽象函数,具体实现在子类中,抽象类:
abstract public class DrawingArea : Panel
{
protected Graphics graphics;
protected float m_Scale = 1F;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// Don't paint background
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.graphics = e.Graphics;
this.graphics.Clear(this.BackColor);
OnDraw();
}
}
其中一个子类:
class BianJingDian : DrawingArea
{
private float m_Scale = 0.1F;
protected override void OnDraw()
{
System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Yellow);
//绘制阀门下半部分
this.graphics.DrawLine(pen, 0, 0, 20, 20);
this.graphics.DrawLine(pen, 0, 0, 40, 0);
this.graphics.DrawLine(pen, 20, 20, 40, 0);
//颜色填充
Point[] pntArr = new Point[3];
pntArr[0] = new Point(0, 0);
pntArr[1] = new Point(40, 0);
pntArr[2] = new Point(20, 20);
System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
this.graphics.ScaleTransform(this.m_Scale, this.m_Scale, MatrixOrder.Prepend);
path.AddLines(pntArr);
this.graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
this.graphics.FillPath(Brushes.Yellow, path);
this.graphics.ScaleTransform(this.m_Scale, this.m_Scale, MatrixOrder.Append);
}
}
缩放参数是m_Scale,具体缩放在子类中实现,只需想办法改变m_Scale就可以。
#14
OK,我知道你想要实现的了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
public float Scale
{
get{return m_Scale;}
set
{
if(value!=m_Scale)
{
m_Scale=value;
this.Invalidate();
}
}
}
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
#15
OK,我知道你想要实现的了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
public float Scale
{
get{return m_Scale;}
set
{
if(value!=m_Scale)
{
m_Scale=value;
this.Invalidate();
}
}
}
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
还有一个问题,就是一个Form中这么多控件要一个个调用吗?
#16
OK,我知道你想要实现的了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
public float Scale
{
get{return m_Scale;}
set
{
if(value!=m_Scale)
{
m_Scale=value;
this.Invalidate();
}
}
}
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
还有一个问题,就是一个Form中这么多控件要一个个调用吗?
11楼已经有一个解决方法,最简单的就是你把这些控件集合在list当中,遍历这个list执行更新
#17
哈哈,你做这个是什么东西啊?游戏么?
#18
哈哈,你做这个是什么东西啊?游戏么?
不是,做一个暖气管道的路线图。
#1
code please
#2
顶下,等解答
#3
code please
protected Graphics graphics;
protected float m_Scale = 1F;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// Don't paint background
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.graphics = e.Graphics;
this.graphics.Clear(this.BackColor);
OnDraw();
}
这是自定义控件的代码,有好的解决办法没?
#4
你缩放的要求具体是什么?要不要随着窗口大小缩放,这样winform下面用panel来搞了。让你的控件填充panel控制panel试下
#5
你缩放的要求具体是什么?要不要随着窗口大小缩放,这样winform下面用panel来搞了。让你的控件填充panel控制panel试下
只是缩放控件,窗口大小不变。
#6
你是想说点击这个自定义控件是按钮会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
#7
你是想说点击这个自定义控件时它会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
#8
你是想说点击这个自定义控件时它会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
是后者!
#9
你是想说点击这个自定义控件时它会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
这个页面有很多这种自定义的控件,调用的时候不能一个一个调用缩放函数吧?
#10
OnDraw();是你实现缩放的函数是吧?
如果是这样:
你在button事件中调用 自定义控件的.Invalidate()函数使控件区域无效导致重新绘制;
如果是这样:
你在button事件中调用 自定义控件的.Invalidate()函数使控件区域无效导致重新绘制;
#11
你是想说点击这个自定义控件时它会缩放?
还是说点另外一个按钮这个自定义控件会缩放?
前者你可以在自定义控件重载OnMouseDown OnMouseUp
后者你可以在自定义控件中定义一个缩放函数,让button click事件调用
这个页面有很多这种自定义的控件,调用的时候不能一个一个调用缩放函数吧?
你可以定义一个自定义控件管理类 CustomerControlManager 在里面定义Add Remove什么的,再定义一个Update函数里面就遍历所有自定义控件的Invalidate();
#12
因为你发的代码有限,所以很多情况都是我猜测的,你可以发相对完整的代码上来,比如调用方的
#13
因为你发的代码有限,所以很多情况都是我猜测的,你可以发相对完整的代码上来,比如调用方的
这是一个抽象函数,具体实现在子类中,抽象类:
abstract public class DrawingArea : Panel
{
protected Graphics graphics;
protected float m_Scale = 1F;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
return cp;
}
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
// Don't paint background
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
this.graphics = e.Graphics;
this.graphics.Clear(this.BackColor);
OnDraw();
}
}
其中一个子类:
class BianJingDian : DrawingArea
{
private float m_Scale = 0.1F;
protected override void OnDraw()
{
System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Yellow);
//绘制阀门下半部分
this.graphics.DrawLine(pen, 0, 0, 20, 20);
this.graphics.DrawLine(pen, 0, 0, 40, 0);
this.graphics.DrawLine(pen, 20, 20, 40, 0);
//颜色填充
Point[] pntArr = new Point[3];
pntArr[0] = new Point(0, 0);
pntArr[1] = new Point(40, 0);
pntArr[2] = new Point(20, 20);
System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();
this.graphics.ScaleTransform(this.m_Scale, this.m_Scale, MatrixOrder.Prepend);
path.AddLines(pntArr);
this.graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
this.graphics.FillPath(Brushes.Yellow, path);
this.graphics.ScaleTransform(this.m_Scale, this.m_Scale, MatrixOrder.Append);
}
}
缩放参数是m_Scale,具体缩放在子类中实现,只需想办法改变m_Scale就可以。
#14
OK,我知道你想要实现的了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
public float Scale
{
get{return m_Scale;}
set
{
if(value!=m_Scale)
{
m_Scale=value;
this.Invalidate();
}
}
}
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
#15
OK,我知道你想要实现的了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
public float Scale
{
get{return m_Scale;}
set
{
if(value!=m_Scale)
{
m_Scale=value;
this.Invalidate();
}
}
}
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
还有一个问题,就是一个Form中这么多控件要一个个调用吗?
#16
OK,我知道你想要实现的了
你不应该在子类再定义一个m_Scale,共享父类的就OK了,
这样修改:
在父类DrawingArea中定义一个属性:
public float Scale
{
get{return m_Scale;}
set
{
if(value!=m_Scale)
{
m_Scale=value;
this.Invalidate();
}
}
}
把子类的m_Scale变量删了
在调用方调用这个属性设置值就可以了
还有一个问题,就是一个Form中这么多控件要一个个调用吗?
11楼已经有一个解决方法,最简单的就是你把这些控件集合在list当中,遍历这个list执行更新
#17
哈哈,你做这个是什么东西啊?游戏么?
#18
哈哈,你做这个是什么东西啊?游戏么?
不是,做一个暖气管道的路线图。