我在网站上看到了一些类似的问题,但没有一个真的对我有帮助。
我有一个函数,当单击一个按钮时,它会在表单上绘制几行,这些行的形状取决于用户在某些文本框中输入的值。
我的问题是,当我最小化表单时,线条消失了,我明白这可以通过使用 OnPaint 事件来解决,但我真的不明白如何。
谁能给我一个简单的例子,使用 OnPaint 事件按下按钮,使用函数绘制一些东西?
给你,简单的关于用户绘制控件的 MSDN 教程
您必须继承Button
类并覆盖 OnPaint 方法。
代码示例:
protected override void OnPaint(PaintEventArgs pe)
{
// Call the OnPaint method of the base class.
base.OnPaint(pe);
// Declare and instantiate a new pen.
System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua);
// Draw an aqua rectangle in the rectangle represented by the control.
pe.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,
this.Size));
}
编辑:
将属性添加到您的类并喜欢并在您的方法public Color MyFancyTextColor {get;set;}
中使用它。OnPaint
此外,它还会出现在 Visual Studio 表单设计器的控件属性编辑器中。
您可以将负责(重新)绘制场景的所有代码编写到Paint
事件发生时调用的方法中。
因此,您可以注册要在 Paint 发生时调用的方法,如下所示:
this.Paint += new PaintEventHandler(YourMethod);
然后,每当需要重绘表单时,就会调用 YourMethod。
还要记住,您的方法必须具有与委托相同的参数,在这种情况下:
void YourMethod(object sender, PaintEventArgs pea)
{
// Draw nice Sun and detailed grass
pea.Graphics.DrawLine(/* here you go */);
}
或者,如另一个答案中所述,您可以覆盖OnPaint
方法。然后你不必关心用你自己的方法添加事件处理程序。