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. Ini berbeda dari kontrol pengguna yang menyediakan permukaan desain visual untuk mengelompokkan beberapa kontrol ke dalam satu unit yang dapat digunakan kembali.
Kontrol kustom digunakan ketika kontrol atau kontrol pengguna yang ada tidak mendekati untuk menyediakan UI atau interaktivitas yang Anda butuhkan. Mereka membutuhkan lebih banyak upaya untuk mengimplementasikan sepenuhnya. Pengelolaan keyboard dan mouse masih disediakan oleh Windows Forms, namun semua perilaku harus Anda terapkan sendiri. Tidak ada permukaan desain yang disediakan dengan kontrol kustom, karena semua gambar dilakukan melalui kode dalam OnPaint metode . Komponen, seperti Timer, masih dapat ditambahkan melalui permukaan desain nonvisual.
Kelas dasar
Ada dua kelas dasar yang dapat dipilih saat membuat kontrol kustom:
-
Ini adalah kelas dasar yang sama yang digunakan oleh kontrol Windows Forms lainnya. Anda mengontrol input dan output kontrol secara langsung.
System.Windows.Forms.ScrollableControl
Beberapa kontrol Windows Forms menggunakan kelas dasar ini. Kelas ini memperluas
Controldengan 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, yang berarti menggambar visual kontrol, dicapai dengan mengesampingkan OnPaint metode . Untuk informasi selengkapnya tentang bagaimana kontrol melakukan pengecatan, lihat Melukis dan menggambar pada kontrol.
Saat Anda membuat kontrol kustom menggunakan templat Visual Studio, OnPaint metode akan ditimpa secara otomatis untuk Anda. Templat melakukan ini karena Anda diharuskan menulis kode untuk 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
Kontrol kustom dicat dengan metode OnPaint. Argumen tunggal dari metode ini adalah PaintEventArgs objek, yang menyediakan semua informasi dan fungsionalitas yang diperlukan untuk merender kontrol Anda.
PaintEventArgs menyediakan dua properti yang digunakan dalam merender kontrol Anda:
PaintEventArgs.ClipRectangle—Mewakili bagian dari kontrol yang perlu digambar ulang. Ini dapat berupa keseluruhan kontrol atau sebagian dari kontrol.
Graphics—Mewakili permukaan grafis kontrol Anda. Ini menyediakan beberapa objek dan metode berorientasi grafis yang menyediakan 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. Latar belakang sebenarnya dicat dengan metode OnPaintBackground(PaintEventArgs) sebelum OnPaint dipanggil. Ganti OnPaintBackground untuk menggambar latar belakang kontrol Anda. Implementasi default metode ini adalah menggambar warna dan gambar yang ditetapkan oleh properti BackColor dan BackgroundImage, masing-masing.
Konten terkait
.NET Desktop feedback