Udostępnij przez


Zastępowanie metody OnPaint

Podstawowe kroki zastępowania dowolnego zdarzenia zdefiniowanego w programie .NET Framework są identyczne i podsumowane na poniższej liście.

Aby zastąpić dziedziczone zdarzenie

  1. Zastąpij chronioną Onmetodę EventName .

  2. Wywołaj metodę OnEventName klasy bazowej z metody overridden OnEventName , aby zarejestrowani delegaci odbierali zdarzenie.

Zdarzenie Paint zostało szczegółowo omówione tutaj, ponieważ każda kontrolka Windows Forms musi zastąpić Paint zdarzenie dziedziczone z Controlelementu . Klasa bazowa Control nie wie, jak należy narysować kontrolkę pochodną i nie zapewnia żadnej logiki malowania w metodzie OnPaint . Metoda OnPaintControl po prostu wysyła Paint zdarzenie do zarejestrowanych odbiorników zdarzeń.

Jeśli przepracowaliśmy przykład w temacie Instrukcje: tworzenie prostej kontrolki Windows Forms, przedstawiono przykład zastępowania OnPaint metody. Poniższy fragment kodu jest pobierany z tego przykładu.

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

Klasa PaintEventArgs zawiera dane zdarzenia Paint . Ma dwie właściwości, jak pokazano w poniższym kodzie.

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 to prostokąt do malowania, a Graphics właściwość odwołuje się do Graphics obiektu. Klasy w System.Drawing przestrzeni nazw to klasy zarządzane, które zapewniają dostęp do funkcji GDI+, nowej biblioteki grafiki systemu Windows. Obiekt Graphics ma metody rysowania punktów, ciągów, linii, łuków, wielokropka i wielu innych kształtów.

Kontrolka wywołuje metodę OnPaint za każdym razem, gdy musi zmienić jej wyświetlanie wizualizacji. Ta metoda z kolei zgłasza Paint zdarzenie.

Zobacz też