Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use the OnPaint event in C#?

Tags:

c#

events

onpaint

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?

like image 568
Stefan Manciu Avatar asked Apr 09 '12 16:04

Stefan Manciu


2 Answers

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.

like image 88
Pavel Krymets Avatar answered Sep 28 '22 00:09

Pavel Krymets


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.

like image 26
Miroslav Mares Avatar answered Sep 28 '22 00:09

Miroslav Mares