Reemplazar el método OnPaint

Los pasos básicos para invalidar cualquier evento definido en .NET Framework son idénticos y se resumen en la lista siguiente.

Para invalidar un evento heredado

  1. Invalide el método OnEventName protegido.

  2. Llame al método OnEventName de la clase base desde el método On EventName invalidado, de forma que los delegados registrados reciban el evento.

El evento Paint se describe en detalle aquí porque todos los controles de Windows Forms deben invalidar el evento Paint que hereda de Control. La clase base Control no sabe cómo se debe dibujar un control derivado y no proporciona ninguna lógica de representación en el método OnPaint. El método OnPaint de Control simplemente envía el evento Paint a los receptores de eventos registrados.

Si ha trabajado con el ejemplo ilustrado en Procedimiento para crear un control de Windows Forms sencillo, ya ha visto un ejemplo de invalidación del método OnPaint. El fragmento de código siguiente se ha extraído de ese ejemplo.

Public Class FirstControl  
   Inherits Control  
  
   Public Sub New()  
   End Sub  
  
   Protected Overrides Sub OnPaint(e As PaintEventArgs)  
      ' Call the OnPaint method of the base class.  
      MyBase.OnPaint(e)  
      ' Call methods of the System.Drawing.Graphics object.  
      e.Graphics.DrawString(Text, Font, New SolidBrush(ForeColor), RectangleF.op_Implicit(ClientRectangle))  
   End Sub  
End Class
public class FirstControl : Control {  
   public FirstControl() {}  
   protected override void OnPaint(PaintEventArgs e) {  
      // Call the OnPaint method of the base class.  
      base.OnPaint(e);  
      // Call methods of the System.Drawing.Graphics object.  
      e.Graphics.DrawString(Text, Font, new SolidBrush(ForeColor), ClientRectangle);  
   }
}

La clase PaintEventArgs contiene datos del evento Paint. Tiene dos propiedades, como se muestra en el código siguiente.

Public Class PaintEventArgs  
   Inherits EventArgs  
   ...  
   Public ReadOnly Property ClipRectangle() As System.Drawing.Rectangle  
      ...  
   End Property  
  
   Public ReadOnly Property Graphics() As System.Drawing.Graphics  
      ...  
   End Property
   ...  
End Class  
public class PaintEventArgs : EventArgs {  
...  
    public System.Drawing.Rectangle ClipRectangle {}  
    public System.Drawing.Graphics Graphics {}  
...  
}  

ClipRectangle es el rectángulo que se va a representar y la propiedad Graphics hace referencia a un objeto Graphics. Las clases del espacio de nombres System.Drawing son clases administradas que proporcionan acceso a la funcionalidad de GDI+, la nueva biblioteca gráfica de Windows. El objeto Graphics tiene métodos para dibujar puntos, cadenas, líneas, arcos, elipses y muchas otras formas.

Un control invoca a su método OnPaint siempre que necesite cambiar su presentación visual. A cambio, este método genera el evento Paint.

Vea también