How to use the OnPaint event in C#?

蓝咒 提交于 2019-12-18 04:20:10

问题


i saw some similar questions on the site but none of them really helped me.

I have a function that draws a few lines on the form when a button is clicked that vary in shape depending on the values the user enters in some textboxes.

My problem is that when i minimize the form, the lines disappear and i understood that this can be resolved by using the OnPaint event, but i don't really understand how.

Can anyone give me a simple example of using a function to draw something at the push of a button using the OnPaint event?


回答1:


Here you go, simpe MSDN tutorial on User-Drawn Controls

You must inherit Button class and override OnPaint method.

Code example:

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));
}

EDIT:

Add property to your class and like public Color MyFancyTextColor {get;set;} and use it in your OnPaint method. Alsow it will apear in control property editor of visual studio form designer.




回答2:


You can write all the code responsible for (re)drawing the scene into method called when Paint event occurs.

So, you can register you method to be called when Paint occurs like this:

this.Paint += new PaintEventHandler(YourMethod);

Then YourMethod will be called whenever the form needs to be redrawn.

Also remember that you method must have the same arguments as delegate, in this case:

void YourMethod(object sender, PaintEventArgs pea)
{
   // Draw nice Sun and detailed grass
   pea.Graphics.DrawLine(/* here you go */);
}

EDIT

Or, as mentioned in another answer, you can override OnPaint method. Then you don't have to take care about adding event handler with your own method.



来源:https://stackoverflow.com/questions/10076116/how-to-use-the-onpaint-event-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!