How to use the OnPaint event in C#?

Stefan Manciu picture Stefan Manciu · Apr 9, 2012 · Viewed 24.8k times · Source

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?

Answer

Pavel Krymets picture Pavel Krymets · Apr 9, 2012

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.