创建新对象时绘制图形
Drawing graphics when creating a new object
我玩了一些我创建的自定义控件,我想为它们绘制一些图形。
我实现了我想要的一切,但我有一个问题,因为我觉得有些事情很奇怪。
例如,我尝试制作一个像这样的新控件:
public class Square : Control
{
public Square(Point location)
{
this.Size = new Size(100, 100);
this.Location = location;
Draw();
}
public void Draw()
{
Graphics g = this.CreateGraphics();
g.DrawRectangle(Pens.Black, 5, 5, 20, 20);
}
}
这不会绘制任何东西,但是,如果我从另一个操作调用 "Draw" 方法,例如在窗体上按下按钮,它就会起作用。
如果我重写控件的 OnPaint 方法并在此处调用 "Draw" 方法,它也会起作用。 (我知道我应该在 Paint/OnPaint 中完成所有绘图,但我这样做只是为了尝试其他事情)
有什么区别?为什么我不能随心所欲地调用 "Draw" 方法?
当你在constructor中调用Draw()
方法时,控件还没有添加到parent中,只是内存中的一个对象,所以调用没有效果。
如果您按照您在 OnPaint()
方法中所说的那样进行调用,则绘制,因为每当需要渲染控件时都会调用此方法。
我玩了一些我创建的自定义控件,我想为它们绘制一些图形。
我实现了我想要的一切,但我有一个问题,因为我觉得有些事情很奇怪。 例如,我尝试制作一个像这样的新控件:
public class Square : Control
{
public Square(Point location)
{
this.Size = new Size(100, 100);
this.Location = location;
Draw();
}
public void Draw()
{
Graphics g = this.CreateGraphics();
g.DrawRectangle(Pens.Black, 5, 5, 20, 20);
}
}
这不会绘制任何东西,但是,如果我从另一个操作调用 "Draw" 方法,例如在窗体上按下按钮,它就会起作用。 如果我重写控件的 OnPaint 方法并在此处调用 "Draw" 方法,它也会起作用。 (我知道我应该在 Paint/OnPaint 中完成所有绘图,但我这样做只是为了尝试其他事情)
有什么区别?为什么我不能随心所欲地调用 "Draw" 方法?
当你在constructor中调用Draw()
方法时,控件还没有添加到parent中,只是内存中的一个对象,所以调用没有效果。
如果您按照您在 OnPaint()
方法中所说的那样进行调用,则绘制,因为每当需要渲染控件时都会调用此方法。