Condividi tramite


Override dell'evento Paint

I passaggi di base per eseguire l'override di qualsiasi evento definito in .NET Framework sono identici e vengono esposti di seguito.

Per eseguire l'override di un evento ereditato

  1. Eseguire l'override del metodo protetto OnNomeEvento.
  2. Chiamare il metodo OnNomeEvento della classe base dal metodo OnNomeEvento di cui è stato eseguito l'override, in modo che l'evento venga ricevuto dai delegati registrati.

L'evento Paint è illustrato nel dettaglio in questa sede perché è necessario che tutti i controlli Windows Form eseguano l'override dell'evento Paint ereditato da Control. La classe Control base non dispone di informazioni sulle modalità di disegno di un controllo derivato e non fornisce alcuna logica di disegno nel metodo OnPaint. Il metodo OnPaint di Control non fa che inviare l'evento Paint ai riceventi di eventi registrati.

Se si è esaminato l'esempio esposto in Sviluppo di un controllo Windows Form semplice, si è avuto modo di vedere un esempio di override del metodo OnPaint. Il codice che segue è tratto da tale esempio.

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 
[C#]
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 classe PaintEventArgs contiene dati relativi all'evento Paint. Presenta due proprietà, come illustrato nel seguente codice.

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
[C#]
public class PaintEventArgs : EventArgs {
...
    public System.Drawing.Rectangle ClipRectangle {...}
    public System.Drawing.Graphics Graphics {...}
...
}

ClipRectangle è il rettangolo da disegnare e la proprietà Graphics fa riferimento a un oggetto System.Drawing.Graphics. Le classi dello spazio dei nomi System.Drawing sono classi gestite che consentono l'accesso alle funzionalità di GDI+, la nuova libreria grafica di Windows. L'oggetto Graphics presenta metodi per il disegno di punti, linee, archi, ellissi e numerose altre forme.

Un controllo richiama il proprio metodo OnPaint ogni volta che è necessario modificare l'aspetto del controllo stesso. Questo metodo genera a sua volta l'evento Paint.

Vedere anche

Gestione e generazione di eventi | Rendering di un controllo Windows Form | Definizione di un evento