Substituindo o método OnPaint

As etapas básicas para substituir qualquer evento definido no .NET Framework são idênticas e são resumidas na lista a seguir.

Substituir um evento herdado

  1. Substituir o método OnEventName protegido.

  2. Chame o método OnEventName da classe base do método OnEventName substituído, de modo que delegados registrados recebam o evento.

O Paint evento é discutido em detalhes aqui porque cada controle do Windows Forms deve substituir o Paint evento que ele herda do Control. A classe base Control não sabe como um controle derivado precisa ser desenhado e não fornece nenhuma lógica de pintura no OnPaint método. O OnPaint método de simplesmente despacha o Paint evento para receptores de Control eventos registrados.

Se você trabalhou com o exemplo em Como: Desenvolver um controle simples do Windows Forms, você viu um exemplo de substituição do OnPaint método. O fragmento de código a seguir é retirado desse exemplo.

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

A PaintEventArgs classe contém dados para o Paint evento. Ele tem duas propriedades, conforme mostrado no código a seguir.

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 é o retângulo a ser pintado e a propriedade refere-se a Graphics um Graphics objeto. As classes no System.Drawing namespace são classes gerenciadas que fornecem acesso à funcionalidade do GDI+, a nova biblioteca de gráficos do Windows. O Graphics objeto tem métodos para desenhar pontos, cadeias de caracteres, linhas, arcos, elipses e muitas outras formas.

Um controle invoca seu OnPaint método sempre que precisa alterar sua exibição visual. Esse método, por sua vez, gera o Paint evento.

Confira também