Bagikan melalui


Kontrol dengan Dukungan Built-In Owner-Drawing

Gambar pemilik dalam Formulir Windows, yang juga dikenal sebagai gambar kustom, adalah teknik untuk mengubah tampilan visual kontrol tertentu.

Catatan

Kata "kontrol" dalam topik ini digunakan untuk berarti kelas yang berasal dari Control atau Component.

Biasanya, Windows menangani lukisan secara otomatis dengan menggunakan pengaturan properti seperti BackColor untuk menentukan tampilan kontrol. Dengan gambar pemilik, Anda mengambil alih proses pengecatan, mengubah elemen penampilan yang tidak tersedia dengan menggunakan properti. Misalnya, banyak kontrol memungkinkan Anda mengatur warna teks yang ditampilkan, tetapi Anda terbatas pada satu warna. Gambar pemilik memungkinkan Anda untuk melakukan hal-hal seperti menampilkan bagian teks dalam warna hitam dan sebagian berwarna merah.

Dalam praktiknya, gambar pemilik mirip dengan menggambar grafik pada formulir. Misalnya, Anda dapat menggunakan metode grafis dalam handler untuk acara formulir Paint untuk meniru ListBox kontrol, tetapi Anda harus menulis kode Anda sendiri untuk menangani semua interaksi pengguna. Dengan gambar pemilik, kontrol menggunakan kode Anda untuk menggambar kontennya tetapi sebaliknya mempertahankan semua kemampuan intrinsiknya. Anda dapat menggunakan metode grafis untuk menggambar setiap item dalam kontrol atau untuk menyesuaikan beberapa aspek setiap item saat Anda menggunakan tampilan default untuk aspek lain dari setiap item.

Gambar Pemilik di Kontrol Formulir Windows

Untuk melakukan gambar pemilik dalam kontrol yang mendukungnya, Anda biasanya akan mengatur satu properti dan menangani satu atau beberapa peristiwa.

Sebagian besar kontrol yang mendukung gambar pemilik memiliki OwnerDraw properti atau DrawMode yang menunjukkan apakah kontrol akan meningkatkan peristiwa atau peristiwa terkait gambarnya ketika melukis dirinya sendiri.

Kontrol yang tidak memiliki OwnerDraw properti atau DrawMode mencakup DataGridView kontrol, yang menyediakan peristiwa gambar yang terjadi secara otomatis, dan ToolStrip kontrol, yang digambar menggunakan kelas penyajian eksternal yang memiliki peristiwa terkait gambarnya sendiri.

Ada banyak jenis peristiwa gambar yang berbeda, tetapi peristiwa gambar umum terjadi untuk menggambar satu item dalam kontrol. Penanganan aktivitas menerima EventArgs objek yang berisi informasi tentang item yang digambar dan alat yang dapat Anda gunakan untuk menggambarnya. Misalnya, objek ini biasanya berisi nomor indeks item dalam koleksi induknya, Rectangle yang menunjukkan batas tampilan item, dan Graphics objek untuk memanggil metode cat. Untuk beberapa peristiwa, EventArgs objek menyediakan informasi tambahan tentang item dan metode yang dapat Anda panggil untuk melukis beberapa aspek item secara default, seperti latar belakang atau persegi panjang fokus.

Untuk membuat kontrol yang dapat digunakan kembali yang berisi kustomisasi yang digambar pemilik Anda, buat kelas baru yang berasal dari kelas kontrol yang mendukung gambar pemilik. Daripada menangani peristiwa gambar, sertakan kode gambar pemilik Anda dalam penimpaan untuk metode atau metode EventName yang sesuai Ondi kelas baru. Pastikan Anda memanggil metode atau metode EventName kelas Ondasar dalam hal ini sehingga pengguna kontrol Anda dapat menangani peristiwa gambar pemilik dan memberikan kustomisasi tambahan.

Kontrol Formulir Windows berikut mendukung gambar pemilik di semua versi .NET Framework:

Kontrol berikut ini mendukung gambar pemilik hanya di .NET Framework 2.0:

Kontrol berikut mendukung gambar pemilik dan baru di .NET Framework 2.0:

Bagian berikut ini menyediakan detail tambahan untuk setiap kontrol ini.

Kontrol ListBox dan ComboBox

Kontrol ListBox dan ComboBox memungkinkan Anda menggambar item individual dalam kontrol baik dalam satu ukuran, atau dalam berbagai ukuran.

Catatan

CheckedListBox Meskipun kontrol berasal dari ListBox kontrol, kontrol tidak mendukung gambar pemilik.

Untuk menggambar setiap item dengan ukuran yang sama, atur DrawMode properti ke OwnerDrawFixed dan tangani DrawItem peristiwa.

Untuk menggambar setiap item menggunakan ukuran yang berbeda, atur DrawMode properti ke OwnerDrawVariable dan tangani peristiwa MeasureItem dan DrawItem . Kejadian ini MeasureItem memungkinkan Anda menunjukkan ukuran item sebelum peristiwa terjadi untuk item tersebut DrawItem .

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik berikut:

Komponen MenuItem mewakili satu item menu dalam komponen MainMenu atau ContextMenu .

Untuk menggambar MenuItem, atur propertinya OwnerDraw ke true dan tangani peristiwanya DrawItem . Untuk mengkustomisasi ukuran item menu sebelum DrawItem peristiwa terjadi, tangani peristiwa item MeasureItem .

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik referensi berikut:

Kontrol TabKontrol

Kontrol memungkinkan TabControl Anda menggambar tab individual dalam kontrol. Gambar pemilik hanya memengaruhi tab; TabPage isi tidak terpengaruh.

Untuk menggambar setiap tab dalam TabControl, atur DrawMode properti ke OwnerDrawFixed dan tangani DrawItem peristiwa. Kejadian ini terjadi sekali untuk setiap tab hanya ketika tab terlihat di kontrol.

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik referensi berikut:

Komponen TipsAlat

Komponen memungkinkan ToolTip Anda menggambar seluruh TipsAlat saat ditampilkan.

Untuk menggambar ToolTip, atur propertinya OwnerDraw ke true dan tangani peristiwanya Draw . Untuk menyesuaikan ukuran ToolTip sebelum Draw peristiwa terjadi, tangani Popup peristiwa dan atur ToolTipSize properti di penanganan aktivitas.

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik referensi berikut:

Kontrol Tampilan Daftar

Kontrol ini ListView memungkinkan Anda menggambar item, subitem, dan header kolom individual dalam kontrol.

Untuk mengaktifkan gambar pemilik dalam kontrol, atur properti ke OwnerDrawtrue.

Untuk menggambar setiap item dalam kontrol, tangani DrawItem peristiwa.

Untuk menggambar setiap subitem atau header kolom dalam kontrol saat View properti diatur ke Details, tangani DrawSubItem peristiwa dan DrawColumnHeader .

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik referensi berikut:

Kontrol TreeView

Kontrol ini TreeView memungkinkan Anda menggambar simpul individual dalam kontrol.

Untuk menggambar hanya teks yang ditampilkan di setiap simpul, atur DrawMode properti ke OwnerDrawText dan tangani DrawNode peristiwa untuk menggambar teks.

Untuk menggambar semua elemen setiap simpul, atur DrawMode properti ke OwnerDrawAll dan tangani DrawNode peristiwa untuk menggambar elemen mana pun yang Anda butuhkan, seperti teks, ikon, kotak centang, tanda plus dan minus, dan garis yang menghubungkan simpul.

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik referensi berikut:

Kontrol DataGridView

Kontrol memungkinkan DataGridView Anda menggambar sel dan baris individual dalam kontrol.

Untuk menggambar sel individual, tangani CellPainting peristiwa.

Untuk menggambar baris atau elemen baris individual, tangani satu atau kedua RowPrePaint peristiwa dan RowPostPaint . Peristiwa RowPrePaint terjadi sebelum sel dalam baris dicat, dan RowPostPaint peristiwa terjadi setelah sel dicat. Anda dapat menangani peristiwa dan CellPainting peristiwa untuk melukis latar belakang baris, sel individual, dan latar depan baris secara terpisah, atau Anda dapat menyediakan penyesuaian tertentu di mana Anda membutuhkannya dan menggunakan tampilan default untuk elemen baris lainnya.

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik berikut:

Kontrol ToolStrip

ToolStrip dan kontrol turunan memungkinkan Anda untuk menyesuaikan aspek penampilan mereka.

Untuk menyediakan penyajian kustom untuk ToolStrip kontrol, atur Renderer properti ToolStrip, , ToolStripPanelToolStripManager, atau ToolStripContentPanel ke ToolStripRenderer objek dan tangani satu atau beberapa dari banyak peristiwa gambar yang disediakan oleh ToolStripRenderer kelas . Atau, atur Renderer properti ke instans kelas Anda sendiri yang berasal dari ToolStripRenderer, , ToolStripProfessionalRendereratau ToolStripSystemRenderer yang mengimplementasikan atau mengambil alih metode EventName tertentuOn.

Untuk informasi selengkapnya, termasuk contoh kode, lihat topik berikut:

Baca juga