Bagikan melalui


Arsitektur Kontrol ToolStrip

Kelas ToolStrip dan ToolStripItem menyediakan sistem yang fleksibel dan dapat diperluas untuk menampilkan toolbar, status, dan item menu. Semua kelas ini terkandung dalam System.Windows.Forms namespace dan semuanya biasanya dinamai dengan awalan "ToolStrip" (seperti ToolStripOverflow) atau dengan akhiran "Strip" (seperti MenuStrip).

ToolStrip

Topik berikut menjelaskan ToolStrip dan kontrol yang berasal darinya.

ToolStrip adalah kelas dasar abstrak untuk MenuStrip, StatusStrip, dan ContextMenuStrip. Model objek berikut menunjukkan ToolStrip hierarki pewarisan.

Diagram yang memperlihatkan model objek ToolStrip.

Anda dapat mengakses semua item dalam ToolStrip melalui koleksi Items. Anda dapat mengakses semua item dalam ToolStripDropDownItem melalui koleksi DropDownItems. Di kelas yang berasal dari ToolStrip, Anda juga dapat menggunakan DisplayedItems properti untuk mengakses hanya item yang saat ini ditampilkan. Ini adalah item yang saat ini tidak berada dalam menu tambahan.

Barang berikut dirancang khusus untuk berfungsi secara mulus baik dengan ToolStripSystemRenderer maupun ToolStripProfessionalRenderer dalam semua orientasi. Mereka tersedia secara default pada saat waktu desain untuk kontrol ToolStrip.

MenuStrip adalah kontainer tingkat atas yang menggantikan MainMenu. Ini juga menyediakan penanganan kunci dan beberapa fitur antarmuka dokumen (MDI). Secara fungsional, ToolStripDropDownItem dan ToolStripMenuItem bekerja bersama dengan MenuStrip, meskipun berasal dari ToolStripItem.

Barang berikut dirancang khusus untuk berfungsi secara mulus baik dengan ToolStripSystemRenderer maupun ToolStripProfessionalRenderer dalam semua orientasi. Mereka tersedia secara default pada saat waktu desain untuk kontrol MenuStrip.

StatusStrip

StatusStrip menggantikan StatusBar kontrol. Fitur khusus StatusStrip termasuk tata letak tabel kustom, dukungan untuk pengaturan ukuran dan pegangan bergerak pada formulir, dan properti Spring, yang memungkinkan ToolStripStatusLabel mengisi ruang yang tersedia secara otomatis.

Barang berikut dirancang khusus untuk berfungsi secara mulus baik dengan ToolStripSystemRenderer maupun ToolStripProfessionalRenderer dalam semua orientasi. Mereka tersedia secara default pada saat waktu desain untuk kontrol StatusStrip.

ContextMenuStrip

ContextMenuStrip ContextMenumenggantikan . Anda dapat mengaitkan ContextMenuStrip dengan kontrol apa pun, dan klik kanan mouse secara otomatis menampilkan menu konteks (atau menu pintasan). Anda dapat menampilkan ContextMenuStrip dengan terprogram menggunakan metode Show. ContextMenuStrip mendukung peristiwa yang dapat dibatalkan Opening dan Closing untuk menangani populasi dinamis dan skenario beberapa kali klik. ContextMenuStrip mendukung gambar, status centang item menu, teks, kunci akses, pintasan, dan menu bertingkat.

Barang berikut dirancang khusus untuk berfungsi secara mulus baik dengan ToolStripSystemRenderer maupun ToolStripProfessionalRenderer dalam semua orientasi. Mereka tersedia secara default pada saat waktu desain untuk kontrol ContextMenuStrip.

Fitur Umum ToolStrip

Topik berikut menjelaskan mengenai fitur dan perilaku yang umum bagi ToolStrip dan kontrol turunan.

Lukisan

Anda dapat melakukan penggambaran khusus pada kontrol ToolStrip dengan beberapa cara. Seperti halnya kontrol Windows Forms lainnya, ToolStrip dan ToolStripItem keduanya memiliki metode OnPaint yang bisa ditimpa dan peristiwa Paint. Seperti halnya lukisan reguler, sistem koordinat relatif terhadap area klien kontrol; artinya, sudut kiri atas kontrol adalah 0, 0. Paint peristiwa dan metode OnPaint untuk ToolStripItem bertindak seperti peristiwa pengecatan kontrol lainnya.

Kontrol ToolStrip juga menyediakan akses lebih rinci ke penyajian item dan kontainer melalui kelas ToolStripRenderer, yang memiliki metode yang dapat disesuaikan untuk menggambar latar belakang, latar belakang item, gambar item, panah item, teks item, dan batas ToolStrip. Argumen peristiwa untuk metode ini mengekspos beberapa properti seperti persegi panjang, warna, dan format teks yang dapat Anda sesuaikan sesuai keinginan.

Untuk menyesuaikan hanya beberapa aspek tentang bagaimana item dicat, Anda biasanya mengambil alih ToolStripRenderer.

Jika Anda menulis item baru dan ingin mengontrol semua aspek lukisan, ambil alih OnPaint metode . Dari dalam OnPaint, Anda dapat menggunakan metode dari ToolStripRenderer.

Secara bawaan, ToolStrip menggunakan pengaturan OptimizedDoubleBuffer ini untuk buffering ganda.

Orangtua

Konsep kepemilikan kontainer dan pewarisan lebih kompleks pada kontrol ToolStrip daripada pada kontrol kontainer Windows Forms lainnya. Ini diperlukan untuk mendukung skenario dinamis seperti overflow, berbagi item menu tarik-turun di beberapa ToolStrip item, dan untuk mendukung pembuatan ContextMenuStrip dari sebuah kontrol.

Daftar berikut ini menjelaskan individu yang terkait dengan pengasuhan dan menjelaskan penggunaannya.

Perilaku Kontrol yang Diwariskan

Kontrol berikut dikunci setiap kali digunakan dalam pewarisan:

Misalnya, buat aplikasi Windows Forms baru dengan menggunakan satu atau beberapa kontrol di daftar sebelumnya. Atur pengubah akses dari satu atau beberapa kontrol ke public atau protected, lalu buat proyek. Tambahkan formulir yang mewarisi dari formulir pertama, lalu pilih kontrol yang diwariskan. Kontrol tampak terkunci, berulah seolah-olah pengubah aksesnya adalah private.

ToolStripContainer Dukungan Pewarisan

Kontrol ToolStripContainer mendukung skenario yang diwariskan terbatas, mirip dengan contoh berikut:

  1. Buat aplikasi Windows Forms baru.

  2. Tambahkan ToolStripContainer ke formulir.

  3. Setel pengubah akses ToolStripContainer menjadi public atau protected.

  4. Tambahkan kombinasi kontrol ToolStrip, MenuStrip, dan ContextMenuStrip ke wilayah ToolStripPanelToolStripContainer.

  5. Bangun proyek.

  6. Tambahkan formulir yang mewarisi dari formulir pertama.

  7. Pilih properti yang diwariskan ToolStripContainer pada formulir.

Perilaku Kontrol Anak yang Diwariskan

Setelah Anda menyelesaikan langkah-langkah sebelumnya, perilaku yang diwariskan berikut terjadi:

Kepercayaan Parsial

Pembatasan ToolStrip di bawah kepercayaan parsial dirancang untuk mencegah masuknya informasi pribadi secara tidak sengaja yang mungkin digunakan oleh orang atau layanan yang tidak sah. Langkah-langkah perlindungannya adalah sebagai berikut:

  • ToolStripDropDown kontrol elemen memerlukan AllWindows untuk menampilkan item dalam ToolStripControlHost. Ini berlaku untuk kontrol intrinsik seperti ToolStripTextBox, , ToolStripComboBoxdan ToolStripProgressBar serta untuk kontrol yang dibuat pengguna. Jika persyaratan ini tidak terpenuhi, item ini tidak ditampilkan. Tidak ada pengecualian yang dilemparkan.

  • Mengatur properti AutoClose menjadi false tidak diizinkan, dan parameter peristiwa Closing yang dapat dibatalkan akan diabaikan. Ini membuatnya tidak mungkin untuk memasukkan lebih dari satu penekanan tombol tanpa menutup item drop-down. Jika persyaratan ini tidak terpenuhi, item tersebut tidak ditampilkan. Tidak ada pengecualian yang dilemparkan.

  • Banyak peristiwa penekanan tombol tidak akan dimunculkan jika terjadi dalam konteks kepercayaan terbatas selain AllWindows.

  • Kunci akses tidak diproses ketika AllWindows tidak diberikan.

Penggunaan

Pola penggunaan berikut berpengaruh pada ToolStrip tata letak, interaksi keyboard, dan perilaku pengguna akhir:

  • Bergabung dalam ToolStripPanel

    ToolStrip dapat direposisi dalam ToolStripPanel dan di seluruhToolStripPanel. Properti Dock diabaikan, dan jika properti Stretch adalah false, ukuran ToolStrip bertambah saat item ditambahkan ke ToolStripPanel. Biasanya, ToolStrip tidak berpartisipasi dalam urutan tab.

  • Tertambat

    ToolStrip ditempatkan di satu sisi kontainer dalam posisi tetap, dan ukurannya diperluas di seluruh tepi tempat kontainer ditampung. Biasanya, ToolStrip tidak berpartisipasi dalam urutan tab.

  • Diposisikan secara absolut

    ToolStrip seperti kontrol lain, karena ditempatkan oleh Location properti, memiliki ukuran tetap, dan biasanya berpartisipasi dalam urutan tab.

Interaksi dengan Keyboard

Kunci Akses

Dikombinasikan dengan atau mengikuti tombol ALT, tombol akses adalah salah satu cara untuk mengaktifkan kontrol menggunakan keyboard. ToolStrip mendukung kunci akses eksplisit dan implisit. Definisi eksplisit menggunakan karakter ampersand (&) sebelum huruf. Definisi implisit menggunakan algoritma yang mencoba menemukan item yang cocok berdasarkan urutan karakter dalam properti tertentu Text .

Tombol Pintasan

Tombol pintasan yang digunakan oleh MenuStrip menggunakan kombinasi enumerasi Keys (yang tidak terikat urutan) untuk menentukan tombol pintasan. Anda juga dapat menggunakan ShortcutKeyDisplayString properti untuk menampilkan kunci pintasan dengan teks saja, seperti menampilkan "Del" alih-alih "Hapus."

Kunci ALT mengaktifkan elemen yang ditunjuk oleh MenuStrip dengan MainMenuStrip. Dari sana, CTRL+TAB menavigasi antar ToolStrip kontrol di dalam ToolStripPanel. Tombol TAB dan tombol panah pada keypad numerik menavigasi di antara item dalam ToolStrip. Algoritma khusus menangani navigasi di wilayah luapan. SPACEBAR memilih ToolStripButton, , ToolStripDropDownButtonatau ToolStripSplitButton.

Fokus dan Validasi

Ketika diaktifkan oleh kunci ALT, MenuStrip atau ToolStrip biasanya tidak mengambil atau menghapus fokus dari kontrol yang saat ini memiliki fokus. Jika ada kontrol yang dihosting dalam MenuStrip atau di dalam drop-down MenuStrip, kontrol mendapatkan fokus saat pengguna menekan tombol TAB. Secara umum, peristiwa GotFocus, LostFocus, Enter, dan Leave dari MenuStrip mungkin tidak dipicu ketika diaktifkan oleh keyboard. Dalam kasus seperti itu, gunakan MenuActivate dan MenuDeactivate sebagai gantinya.

Secara default, CausesValidation adalah false. Panggil Validate secara eksplisit pada formulir Anda untuk melakukan validasi.

Tata letak

Anda mengontrol tata letak ToolStrip dengan memilih salah satu anggota ToolStripLayoutStyle dengan properti LayoutStyle.

Tata Letak Tumpukan

Penyusunan adalah pengaturan item berdampingan di kedua ujung ToolStrip. Daftar berikut ini menjelaskan tata letak tumpukan.

Fitur Tata Letak Tumpukan Lainnya

Alignment menentukan akhir ToolStrip di mana item diratakan.

Ketika item tidak pas dalam ToolStrip, sebuah tombol overflow akan muncul secara otomatis. Overflow Pengaturan properti menentukan apakah item muncul di area overflow selalu, sesuai kebutuhan, atau tidak pernah.

Dalam peristiwa LayoutCompleted, Anda dapat memeriksa properti Placement untuk menentukan apakah item ditempatkan di ToolStrip utama, ToolStrip kelebihan, atau tidak ditampilkan sama sekali saat ini. Alasan umum mengapa item tidak ditampilkan adalah karena item tidak muat di ToolStrip utama dan propertinya Overflow diatur ke Never.

Membuat ToolStrip menjadi dapat bergerak dengan menempatkannya di dalam ToolStripPanel dan mengatur GripStyle-nya ke Visible.

Opsi Tata Letak Lainnya

Opsi tata letak lainnya adalah Flow dan Table.

Tata Letak Mengalir

Flow tata letak adalah default untuk ContextMenuStrip, ToolStripDropDownMenu, dan ToolStripOverflow. Ini mirip dengan FlowLayoutPanel. Fitur Flow tata letak adalah sebagai berikut:

Tata Letak Tabel

Table adalah tata letak bawaan untuk StatusStrip. Ini mirip dengan TableLayoutPanel. Fitur Flow tata letak adalah sebagai berikut:

ToolStripItem

Topik berikut menjelaskan ToolStripItem dan kontrol yang berasal darinya.

ToolStripItemadalah kelas dasar abstrak untuk semua item yang masuk ke .ToolStrip Model objek berikut menunjukkan ToolStripItem hierarki pewarisan.

Diagram yang memperlihatkan model objek ToolStripItem.

ToolStripItem kelas-kelas ini baik mewarisi langsung dari ToolStripItem, atau mereka mewarisi secara tidak langsung dari ToolStripItem melalui ToolStripControlHost atau ToolStripDropDownItem.

ToolStripItem kontrol harus terkandung dalam ToolStrip, MenuStrip, StatusStrip, atau ContextMenuStrip dan tidak dapat ditambahkan langsung ke formulir. Berbagai kelas kontainer dirancang untuk berisi subset ToolStripItem kontrol yang sesuai.

Tabel berikut mencantumkan kontrol stok ToolStripItem dan kontainer di mana mereka tampil terbaik. Meskipun item apa pun ToolStrip dapat dihosting dalam kontainer turunan apa pun ToolStrip, item ini dirancang untuk tampak terbaik dalam kontainer berikut:

Nota

ToolStripDropDown tidak muncul di kotak alat perancang.

Item yang terkandung ToolStrip MenuStrip ContextMenuStrip StatusStrip ToolStripDropDown
ToolStripButton Ya Tidak. Tidak. Tidak. Ya
ToolStripComboBox Ya Ya Ya Tidak. Ya
ToolStripSplitButton Ya Tidak. Tidak. Ya Ya
ToolStripLabel Ya Tidak. Tidak. Ya Ya
ToolStripSeparator Ya Ya Ya Tidak. Ya
ToolStripDropDownButton Ya Tidak. Tidak. Ya Ya
ToolStripTextBox Ya Ya Ya Tidak. Ya
ToolStripMenuItem Tidak. Ya Ya Tidak. Tidak.
ToolStripStatusLabel Tidak. Tidak. Tidak. Ya Tidak.
ToolStripProgressBar Ya Tidak. Tidak. Ya Tidak.
ToolStripControlHost Ya Ya Tidak. Ya Ya

ToolStripButton

ToolStripButton adalah item tombol untuk ToolStrip. Anda dapat menampilkannya dengan berbagai gaya batas, dan Anda dapat menggunakannya untuk mewakili dan mengaktifkan status operasional. Anda juga dapat menentukannya untuk memiliki fokus secara default.

ToolStripLabel

ToolStripLabel menyediakan fungsionalitas label pada pengendali ToolStrip. ToolStripLabel mirip dengan ToolStripButton yang tidak mendapatkan fokus secara default dan tidak tampil sebagai tertekan atau disorot.

ToolStripLabel sebagai item yang dihosting mendukung kunci akses.

LinkColorGunakan properti , LinkVisited, dan LinkBehavior pada ToolStripLabel untuk mendukung kontrol tautan di ToolStrip.

ToolStripStatusLabel

ToolStripStatusLabel adalah versi ToolStripLabel yang dirancang khusus untuk digunakan dalam StatusStrip. Fitur khusus termasuk BorderStyle, BorderSides, dan Spring.

PemisahToolStrip

menambahkan ToolStripSeparator garis vertikal atau horizontal ke toolbar atau menu, tergantung pada orientasinya. Ini menyediakan pengelompokan atau perbedaan antara item, seperti yang ada di menu.

Anda dapat menambahkan ToolStripSeparator pada waktu desain dengan memilihnya dari daftar drop-down. Namun, Anda juga dapat membuat ToolStripSeparator secara otomatis dengan mengetik tanda hubung (-) di node template perancang atau dalam metode Add.

ToolStripControlHost

ToolStripControlHost adalah kelas dasar abstrak untuk ToolStripComboBox, ToolStripTextBox, dan ToolStripProgressBar. ToolStripControlHost dapat menghosting kontrol lain, termasuk kontrol kustom, dengan dua cara:

  • Buat ToolStripControlHost dengan kelas yang berasal dari Control. Untuk sepenuhnya mengakses kontrol dan properti yang dihosting, Anda harus mengubah properti Control kembali ke kelas aktual yang diwakilinya.

  • Perluas ToolStripControlHost, dan dalam konstruktor tanpa parameter kelas yang diwariskan, panggil konstruktor kelas dasar yang melewati kelas yang berasal dari Control. Opsi ini memungkinkan Anda membungkus metode kontrol dan properti umum untuk akses mudah dalam ToolStrip.

ToolStripComboBox

ToolStripComboBox adalah ComboBox yang dioptimalkan untuk hosting dalam ToolStrip. Sebagian properti-properti dan peristiwa-peristiwa kontrol yang dihosting diekspos pada tingkat ToolStripComboBox, tetapi kontrol mendasar ComboBox sepenuhnya dapat diakses melalui properti ComboBox.

ToolStripTextBox

ToolStripTextBox adalah TextBox yang dioptimalkan untuk hosting dalam ToolStrip. Sebagian properti-properti dan peristiwa-peristiwa kontrol yang dihosting diekspos pada tingkat ToolStripTextBox, tetapi kontrol mendasar TextBox sepenuhnya dapat diakses melalui properti TextBox.

ToolStripProgressBar

ToolStripProgressBar adalah ProgressBar yang dioptimalkan untuk hosting dalam ToolStrip. Sebagian properti-properti dan peristiwa-peristiwa kontrol yang dihosting diekspos pada tingkat ToolStripProgressBar, tetapi kontrol mendasar ProgressBar sepenuhnya dapat diakses melalui properti ProgressBar.

ToolStripDropDownItem

ToolStripDropDownItem adalah kelas dasar abstrak untuk ToolStripMenuItem, , ToolStripDropDownButtondan ToolStripSplitButton, yang dapat menghosting item secara langsung atau menghosting item tambahan dalam kontainer drop-down. Anda melakukan ini dengan mengatur DropDown properti ke ToolStripDropDown dan mengatur Items properti dari ToolStripDropDown. Akses item drop-down ini langsung melalui DropDownItems properti .

ToolStripMenuItem

ToolStripMenuItem adalah sebuah ToolStripDropDownItem yang berfungsi dengan ToolStripDropDownMenu dan ContextMenuStrip untuk menangani penyorotan khusus, tata letak, dan susunan kolom untuk menu.

ToolStripDropDownButton

ToolStripDropDownButton terlihat seperti ToolStripButton, tetapi menampilkan area drop-down saat pengguna mengkliknya. Sembunyikan atau perlihatkan anak panah tarik-turun dengan mengatur properti ShowDropDownArrow. ToolStripDropDownButton menghosting ToolStripOverflowButton yang menampilkan item yang meluap dari ToolStrip.

ToolStripSplitButton

ToolStripSplitButton menggabungkan fitur tombol biasa dan tombol drop-down.

Gunakan properti DefaultItem untuk menyinkronkan event Click dari item drop-down yang dipilih dengan item yang diperlihatkan pada tombol.

Fitur Umum ToolStripItem

ToolStripItem menyediakan fitur dan opsi umum berikut untuk mewarisi kontrol:

  • Peristiwa inti

  • Penanganan gambar

  • Penyelarasan

  • Hubungan teks dan gambar

  • Gaya tampilan

Peristiwa Inti

ToolStripItem kontrol menerima peristiwa klik, gerakan mouse, dan penggambaran mereka sendiri, dan dapat melakukan beberapa praproses keyboard juga.

Penanganan Gambar

Properti Image, , ImageAlignImageIndex, ImageKey, dan ImageScaling berkaitan dengan berbagai aspek penanganan gambar. Gunakan gambar dalam ToolStrip kontrol dengan langsung mengatur properti ini atau dengan mengatur properti yang hanya digunakan saat menjalankan ImageList.

Penskalaan gambar ditentukan oleh interaksi properti dalam ToolStrip dan ToolStripItem, sebagai berikut:

Penyelarasan

Nilai Alignment properti menentukan titik akhir dari ToolStrip di mana item muncul. Properti Alignment hanya berfungsi ketika tata letak ToolStrip diatur ke salah satu nilai dari stack overflow.

Item ditempatkan pada ToolStrip sesuai dengan urutan di mana item muncul dalam koleksi Item. Untuk mengubah secara terprogram di mana item ditata, gunakan Insert metode untuk memindahkan item dalam koleksi. Metode ini memindahkan item tetapi tidak menduplikasinya.

Hubungan Teks dan Gambar

Properti TextImageRelation menentukan penempatan relatif gambar sehubungan dengan teks pada ToolStripItem. Item yang tidak memiliki gambar, teks, atau keduanya diperlakukan sebagai kasus khusus sehingga ToolStripItem tidak menampilkan titik kosong untuk elemen atau elemen yang hilang.

Gaya Tampilan

DisplayStyle memungkinkan Anda mengatur nilai properti Teks dan Gambar item sambil hanya menampilkan apa yang Anda inginkan. Ini biasanya digunakan untuk hanya mengubah gaya tampilan saat menampilkan item yang sama dalam konteks yang berbeda.

Kelas Aksesori

Kelas yang menyediakan berbagai fungsionalitas lainnya meliputi:

Lihat juga