我玩了一些由我创建的自定义控件,我想为它们绘制一些图形。创建新对象时绘制图形
我实现了我想要的一切,但我有一个问题,因为有些东西对我来说似乎很陌生。 我试图例如使一个新的控制是这样的:
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中的所有绘图,但我只是为了尝试其他的东西)
有什么区别?为什么我不能在我想要的任何位置调用我的“绘制”方法?
大概由'Draw()'调用完成的绘图被第一个'OnPaint'调用覆盖。并且在一个按钮点击处理程序中调用它只会“工作”,直到部分或全部控件失效并调用“OnPaint”,这将再次覆盖您在“Draw”中绘制的内容。这是仅在“OnPaint”中绘制规则的原因。请参阅http://stackoverflow.com/questions/30419493/drawing-glitches-when-using-creategraphics-rather-than-paint-event-handler-for-c。 – adv12
你可以简单地关注[msdn](https://msdn.microsoft.com/en-us/library/b818z6z6(v = vs.110).aspx)(quote:*“当从Control类继承时,你必须重写'OnPaint'方法“*)。谁告诉你你的方法应该起作用?它不会。 – Sinatr
现在我明白了!真棒解释:) –