如何在C#中使用OnPaint事件?

时间:2012-04-09 16:12:51

标签: c# events onpaint

我在网站上看到了一些类似的问题,但没有一个真正帮助过我。

我有一个函数,当单击一个按钮时,它会在窗体上绘制几行,其形状会根据用户在某些文本框中输入的值而变化。

我的问题是,当我最小化表格时,线条消失,我明白这可以通过使用OnPaint事件来解决,但我真的不明白如何。

有人能给我一个简单的例子,使用函数在按下按钮时使用OnPaint事件绘制内容吗?

2 个答案:

答案 0 :(得分:6)

Here you go,simpe关于用户绘制控件的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方法中使用该媒体资源。 Alsow它将成为visual studio表单设计师的控件属性编辑器。

答案 1 :(得分:2)

您可以将负责(重新)绘制场景的所有代码编写到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方法。然后,您不必关心使用自己的方法添加事件处理程序。