Bagikan melalui


Mengesampingkan Metode OnPaint

Langkah-langkah dasar untuk menimpa peristiwa apa pun yang ditentukan dalam .NET Framework identik dan dirangkum dalam daftar berikut.

Untuk mengambil alih peristiwa yang diwariskan

  1. Ambil alih metode EventName yang dilindungi.On

  2. OnPanggil metode EventName dari kelas dasar dari metode EventName yang ditimpaOn, sehingga delegasi terdaftar menerima peristiwa.

Acara Paint ini dibahas secara rinci di sini karena setiap kontrol Formulir Windows harus mengambil alih Paint peristiwa yang diwarisinya dari Control. Kelas dasar Control tidak tahu bagaimana kontrol turunan perlu digambar dan tidak menyediakan logika lukisan apa pun dalam metode .OnPaint Metode OnPaintControl hanya mengirimkan Paint peristiwa ke penerima peristiwa terdaftar.

Jika Anda bekerja melalui sampel dalam Cara: Mengembangkan Simple Formulir Windows Control, Anda telah melihat contoh mengambil alih OnPaint metode . Fragmen kode berikut diambil dari sampel tersebut.

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

Kelas PaintEventArgs berisi data untuk peristiwa tersebut Paint . Ini memiliki dua properti, seperti yang ditunjukkan dalam kode berikut.

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 adalah persegi panjang yang akan dicat, dan Graphics properti mengacu pada Graphics objek. Kelas di System.Drawing namespace adalah kelas terkelola yang menyediakan akses ke fungsionalitas GDI+, pustaka grafis Windows baru. Objek Graphics memiliki metode untuk menggambar titik, string, garis, busur, elipsis, dan banyak bentuk lainnya.

Kontrol memanggil metodenya OnPaint setiap kali perlu mengubah tampilan visualnya. Metode ini pada gilirannya Paint meningkatkan peristiwa.

Baca juga