Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini memperkenalkan Anda ke kontrol kustom dan menjelaskan perbedaannya dengan kontrol pengguna. Kontrol kustom tidak menyediakan permukaan desain visual dan mengandalkan kode yang disediakan pengguna untuk menggambar diri mereka sendiri. Desain ini berbeda dari kontrol pengguna, yang menyediakan permukaan desain visual untuk mengelompokkan beberapa kontrol ke dalam satu unit yang dapat digunakan kembali.
Gunakan kontrol kustom saat kontrol atau kontrol pengguna yang ada tidak mendekati untuk menyediakan UI atau interaktivitas yang Anda butuhkan. Mereka membutuhkan lebih banyak upaya untuk mengimplementasikan sepenuhnya. Windows Forms masih menyediakan penanganan keyboard dan mouse, tetapi Anda perlu menerapkan perilaku tertentu. Kontrol kustom tidak menyertakan permukaan desain karena semua gambar dilakukan melalui kode dalam OnPaint metode . Anda masih dapat menambahkan komponen, seperti Timer, melalui permukaan desain nonvisual.
Kelas dasar
Saat membuat kontrol kustom, pilih dari dua kelas dasar:
-
Kelas dasar ini sama dengan yang digunakan oleh kontrol Windows Forms lainnya. Anda langsung mengontrol input dan output kontrol.
System.Windows.Forms.ScrollableControl
Kelas dasar ini digunakan oleh beberapa kontrol Windows Forms.
Controldiperluas dengan menambahkan kemampuan untuk menggulir konten.
Kecuali Anda memerlukan pengguliran konten kontrol kustom, gunakan Control sebagai kelas dasar Anda.
Kemampuan yang diwariskan
Karena kelas dasar kontrol kustom adalah Control, Anda secara otomatis mewarisi fungsionalitas Windows Forms yang dibagikan oleh semua kontrol. Berikut adalah beberapa kemampuan yang Anda dapatkan dengan kontrol kustom:
- Input dari keyboard dan mouse.
- Perilaku tata letak, seperti penambatan dan pemautan.
- Dukungan untuk tab.
- Batasan ukuran minimum dan maksimum.
Lukisan
Lukisan berarti menggambar visual kontrol. Anda menyelesaikan tugas ini dengan meng-override metode OnPaint. Untuk informasi selengkapnya tentang bagaimana kontrol melakukan pengecatan, lihat Melukis dan menggambar pada kontrol.
Saat Anda membuat kontrol kustom dengan menggunakan templat Visual Studio, Anda secara otomatis mengambil alih metode tersebut OnPaint . Templat melakukan ini karena Anda perlu menulis kode yang menggambar kontrol Anda. Berikut adalah contoh apa yang dihasilkan templat:
public partial class CustomControl1 : Control
{
public CustomControl1()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
}
}
Public Class CustomControl1
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
MyBase.OnPaint(e)
'Add your custom paint code here
End Sub
End Class
Anda melukis kontrol kustom dengan menggunakan metode OnPaint. Metode ini menerima satu argumen, objek PaintEventArgs, yang menyediakan semua informasi dan fungsionalitas yang Anda butuhkan untuk merender kontrol Anda.
PaintEventArgs menyediakan dua properti yang Anda gunakan dalam merender kontrol Anda:
PaintEventArgs.ClipRectangle—Mewakili bagian dari kontrol yang perlu digambar ulang. Bagian ini bisa menjadi seluruh kontrol atau hanya bagian darinya.
Graphics—Mewakili permukaan grafis kontrol Anda. Ini menyediakan beberapa objek dan metode berorientasi grafis yang memberi Anda fungsionalitas yang diperlukan untuk menggambar kontrol Anda.
Metode OnPaint ini dipanggil setiap kali kontrol ditampilkan atau disegarkan di layar, dan objek PaintEventArgs.ClipRectangle mewakili persegi panjang tempat proses menggambar berlangsung. Jika seluruh kontrol perlu dimuat ulang, PaintEventArgs.ClipRectangle mewakili ukuran seluruh kontrol. Jika hanya sebagian dari kontrol yang perlu diperbarui, itu hanya menunjukkan area yang perlu digambar ulang. Contoh kasus seperti itu adalah ketika kontrol sebagian dikaburkan oleh kontrol lain di antarmuka pengguna, dan kontrol lain itu dipindahkan, bagian yang baru terekspos dari kontrol di bawahnya harus digambar ulang.
Kode dalam metode OnPaint kontrol dijalankan ketika kontrol pertama kali ditampilkan dan setiap kali dibatalkan validasinya. Untuk memastikan kontrol Anda digambar ulang setiap kali ukurannya diubah, tambahkan baris berikut ke dalam konstruktor kontrol Anda:
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.ResizeRedraw, True)
Contoh
Cuplikan kode berikut adalah kontrol kustom yang merender beberapa persegi panjang berwarna di sekitar bagian tepi kontrol tersebut.
protected override void OnPaint(PaintEventArgs pe)
{
Rectangle rect = this.ClientRectangle;
// Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
// Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1;
rect.Height -= 1;
Pen[] colorPens = new Pen[] { Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan };
foreach (Pen pen in colorPens)
{
pe.Graphics.DrawRectangle(pen, rect);
rect.Inflate(-1, -1);
}
// Raise the Paint event so users can custom paint if they want.
base.OnPaint(pe);
}
Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
Dim rect As Rectangle = Me.ClientRectangle
'Bring the width/height in by 1 pixel so the rectangle is drawn inside the control.
'Otherwise, it kind of overlaps the outside edge.
rect.Width -= 1
rect.Height -= 1
Dim colorPens As Pen() = {Pens.Blue, Pens.BlueViolet,
Pens.AliceBlue, Pens.CornflowerBlue,
Pens.Cyan, Pens.DarkCyan}
For Each curPen As Pen In colorPens
e.Graphics.DrawRectangle(curPen, rect)
rect.Inflate(-1, -1)
Next
'Raise the Paint event so users can custom paint if they want.
MyBase.OnPaint(e)
End Sub
Kode sebelumnya membuat kontrol yang terlihat seperti gambar berikut:
Latar Belakang
Perhatikan bahwa latar belakang kontrol dicat dengan SystemColors.Control warna, meskipun kode tersebut OnPaint tidak membersihkan atau mengisi kontrol dengan warna. Metode OnPaintBackground(PaintEventArgs) melukis latar belakang sebelum memanggil OnPaint. Ganti OnPaintBackground untuk menggambar latar belakang kontrol Anda. Implementasi default dari metode ini menggambar warna dan gambar yang masing-masing ditetapkan oleh properti BackColor dan BackgroundImage.
Konten terkait
.NET Desktop feedback