我玩了一些由我创建的自定义控件,我想为它们绘制一些图形。
我实现了我想要的一切,但我有一个问题,因为我觉得有些奇怪。 例如,我尝试制作一个像这样的新控件:
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);
}
}
这不会绘制任何东西,但是,如果我从另一个动作调用“绘图”方法,如按钮按下它可以工作的形式。 如果我覆盖我的控件的OnPaint方法并在此处调用“Draw”方法,它也可以工作。 (我知道我应该在Paint / OnPaint中绘制所有绘图,但我这样做只是为了尝试其他事情)
有什么区别?为什么我不能在任何地方调用我的“绘图”方法?
答案 0 :(得分:1)
当您在构造函数中调用Draw()
方法时,控件尚未添加到父级,只是内存中的对象,因此调用无效。
如果按照OnPaint()
方法中的说法进行调用,则会绘制,因为只要需要渲染控件,就会调用此方法。