Bagikan melalui


Kontrol User-Drawn

.NET Framework memberi Anda kemampuan untuk dengan mudah mengembangkan kontrol Anda sendiri. Anda dapat membuat kontrol pengguna, yang merupakan sekumpulan kontrol standar yang terikat bersama dengan kode, atau Anda dapat merancang kontrol Anda sendiri dari bawah ke atas. Anda bahkan dapat menggunakan pewarisan untuk membuat kontrol yang mewarisi dari kontrol yang ada dan menambahkan ke fungsionalitas yang melekat. Pendekatan apa pun yang Anda gunakan, .NET Framework menyediakan fungsionalitas untuk menggambar antarmuka grafis kustom untuk kontrol apa pun yang Anda buat.

Lukisan kontrol dicapai dengan eksekusi kode dalam metode kontrol OnPaint . Argumen tunggal metode OnPaint adalah PaintEventArgs objek yang menyediakan semua informasi dan fungsionalitas yang diperlukan untuk merender kontrol Anda. PaintEventArgs menyediakan sebagai properti dua objek utama yang akan digunakan dalam penyajian kontrol Anda:

  • ClipRectangle objek - persegi panjang yang mewakili bagian kontrol yang akan digambar. Ini bisa menjadi seluruh kontrol, atau bagian dari kontrol tergantung pada bagaimana kontrol digambar.

  • Graphics objek - merangkum beberapa objek dan metode berorientasi grafis yang menyediakan fungsionalitas yang diperlukan untuk menggambar kontrol Anda.

Untuk informasi selengkapnya tentang Graphics objek dan cara menggunakannya, lihat Cara: Membuat Objek Grafis untuk Gambar.

Peristiwa OnPaint ditembakkan setiap kali kontrol digambar atau disegarkan di layar, dan ClipRectangle objek mewakili persegi panjang tempat lukisan akan berlangsung. Jika seluruh kontrol perlu disegarkan, ClipRectangle akan mewakili ukuran seluruh kontrol. Namun, jika hanya bagian dari kontrol yang perlu di-refresh, ClipRectangle objek hanya akan mewakili wilayah yang perlu digambar ulang. Contoh kasus seperti itu adalah ketika kontrol sebagian dikaburkan oleh kontrol atau formulir lain di antarmuka pengguna.

Saat mewarisi dari Control kelas , Anda harus mengambil OnPaint alih metode dan menyediakan kode penyajian grafis di dalamnya. Jika Anda ingin menyediakan antarmuka grafis kustom ke kontrol pengguna atau kontrol yang diwariskan, Anda juga dapat melakukannya dengan mengambil alih OnPaint metode . Contohnya ditunjukkan di bawah ini:

Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)  
   ' Call the OnPaint method of the base class.  
   MyBase.OnPaint(e)  
  
   ' Declare and instantiate a drawing pen.  
   Using myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)  
      ' Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))  
   End Using
End Sub  
protected override void OnPaint(PaintEventArgs e)  
{  
   // Call the OnPaint method of the base class.  
   base.OnPaint(e);  
  
   // Declare and instantiate a new pen.  
   using (System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua))  
   {
      // Draw an aqua rectangle in the rectangle represented by the control.  
      e.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,
         this.Size));  
   }
}  

Contoh sebelumnya menunjukkan cara merender kontrol dengan representasi grafis yang sangat sederhana. Ini memanggil OnPaint metode kelas dasar, ia membuat Pen objek yang akan digambar, dan akhirnya menggambar elips di persegi panjang yang ditentukan oleh Location dan Size kontrol. Meskipun sebagian besar kode penyajian akan jauh lebih rumit daripada ini, contoh ini menunjukkan penggunaan objek yang Graphics terkandung dalam PaintEventArgs objek. Perhatikan bahwa jika Anda mewarisi dari kelas yang sudah memiliki representasi grafis, seperti UserControl atau Button, dan Anda tidak ingin menggabungkan representasi tersebut ke dalam penyajian Anda, Anda tidak boleh memanggil metode kelas OnPaint dasar Anda.

Kode dalam OnPaint metode kontrol Anda akan dijalankan ketika kontrol pertama kali digambar, dan setiap kali di-refresh. Untuk memastikan bahwa kontrol Anda digambar ulang setiap kali diubah ukurannya, tambahkan baris berikut ke konstruktor kontrol Anda:

SetStyle(ControlStyles.ResizeRedraw, True)  
SetStyle(ControlStyles.ResizeRedraw, true);  

Catatan

Control.Region Gunakan properti untuk mengimplementasikan kontrol non-persegi panjang.

Baca juga