Compartilhar via


Sobrescrevendo 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.

Para substituir um evento herdado

  1. Sobreponha o método protegido OnEventName.

  2. Chame o método OnEventName da classe base a partir do método substituído OnEventName para que os delegados registrados recebam o evento.

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

Se você trabalhou no exemplo em Como: Desenvolver um Controle Simples do Windows Forms, você viu um exemplo de como substituir o método OnPaint. O fragmento de código a seguir é extraído 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 classe PaintEventArgs contém dados para o evento Paint. 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 Graphics refere-se a um objeto Graphics. As classes no namespace System.Drawing são classes gerenciadas que fornecem acesso à funcionalidade do GDI+, a nova biblioteca de elementos gráficos do Windows. O objeto Graphics tem métodos para desenhar pontos, strings, linhas, arcos, elipses e muitas outras formas geométricas.

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

Consulte também