Search code examples
c#winformsonpaint

C# WinForms - Paint method questions


I am not sure what is the best way of using graphics - should I attach my classes to main form Paint event and then do the drawing, or it is better to call it from overidden OnPaint void like this? I mean, is it OK to do that like this:

protected override void OnPaint(PaintEventArgs e)
{
    base.OnPaint(e)  //what is this good for? My app works without it as well
    Graphics g=e.Graphics;
    DrawEnemies(g);
    UpdateHUD(g);
    DrawSelectedUnit(g);
}

Solution

  • It is recommended that controls override the On... methods rather than subscribe to their own events.

    You should call base.OnPaint to ensure the Paint method is fired properly.

    From MSDN:

    The OnPaint method also enables derived classes to handle the event without attaching a delegate. This is the preferred technique for handling the event in a derived class.

    Notes to Inheritors
    When overriding OnPaint in a derived class, be sure to call the base class's OnPaint method so that registered delegates receive the event.