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.
Di Formulir Windows, input pengguna dikirim ke aplikasi dalam bentuk pesan Windows. Serangkaian metode yang dapat diambil alih memproses pesan ini di tingkat aplikasi, formulir, dan kontrol. Ketika metode ini menerima pesan keyboard, metode ini memunculkan peristiwa yang dapat ditangani untuk mendapatkan informasi tentang input keyboard. Dalam banyak kasus, aplikasi Formulir Windows dapat memproses semua input pengguna hanya dengan menangani peristiwa ini. Dalam kasus lain, aplikasi mungkin perlu mengambil alih salah satu metode yang memproses pesan untuk mencegat pesan tertentu sebelum diterima oleh aplikasi, formulir, atau kontrol.
Kejadian pada keyboard
Semua kontrol Formulir Windows mewarisi serangkaian event yang terkait dengan mouse dan input keyboard. Misalnya, kontrol dapat menangani KeyPress event untuk menentukan kode karakter dari tombol yang ditekan. Untuk informasi selengkapnya, lihat Menangani event keyboard.
Metode yang memproses pesan input pengguna
Formulir dan kontrol memiliki akses ke antarmuka IMessageFilter dan serangkaian metode yang dapat diganti yang memproses pesan Windows di titik yang berbeda dalam antrean pesan. Semua metode ini memiliki parameter Message, yang merangkum detail tingkat rendah pesan Windows. Anda dapat menerapkan atau mengambil alih metode ini untuk memeriksa pesan dan kemudian menggunakan pesan atau meneruskannya ke konsumen berikutnya dalam antrean pesan. Tabel berikut menyajikan metode yang memproses semua pesan Windows dalam Formulir Windows.
| Metode | Catatan |
|---|---|
| PreFilterMessage | Metode ini mencegat pesan Windows yang diantrekan (juga dikenal sebagai diposting) di tingkat aplikasi. |
| PreProcessMessage | Metode ini mencegat pesan Windows pada tingkat formulir dan kontrol sebelum diproses. |
| WndProc | Metode ini memproses pesan Windows pada tingkat formulir dan kontrol. |
| DefWndProc | Metode ini melakukan pemrosesan default pesan Windows pada formulir dan tingkat kontrol. Ini menyediakan fungsionalitas minimal jendela. |
| OnNotifyMessage | Metode ini mencegat pesan pada tingkat formulir dan kontrol, setelah diproses. Bit gaya EnableNotifyMessage harus diaktifkan agar metode ini dapat dipanggil. |
Pesan keyboard dan mouse diproses oleh serangkaian metode tambahan yang dapat diganti yang khusus untuk jenis pesan tersebut. Untuk informasi selengkapnya, lihat bagian Kunci pra-pemrosesan .
Jenis kunci
Formulir Windows mengidentifikasi input keyboard sebagai kode kunci virtual yang diwakili oleh enumerasi bitwise Keys. Dengan enumerasi Keys, Anda dapat menggabungkan serangkaian tombol yang ditekan untuk menghasilkan satu nilai. Nilai-nilai ini sesuai dengan nilai yang menyertai pesan Windows WM_KEYDOWN dan WM_SYSKEYDOWN . Anda dapat mendeteksi sebagian besar penekanan tombol fisik dengan menangani peristiwa KeyDown atau KeyUp. Tombol karakter adalah subset dari Keys enumerasi dan sesuai dengan nilai yang menyertai pesan Windows WM_CHAR dan WM_SYSCHAR. Jika kombinasi tombol yang ditekan menghasilkan karakter, Anda dapat mendeteksi karakter dengan menangani peristiwa KeyPress. Atau, Anda dapat menggunakan Keyboard, yang diekspos oleh antarmuka pemrograman Visual Basic, untuk menemukan tombol mana yang ditekan dan mengirim tombol. Untuk informasi selengkapnya, lihat Mengakses Keyboard (Visual Basic).
Urutan kejadian keyboard
Seperti yang tercantum sebelumnya, ada tiga event terkait keyboard yang dapat terjadi pada elemen kontrol. Urutan berikut menunjukkan urutan umum peristiwa:
- Pengguna menekan tombol A, tombol tersebut dipraolah, dikirimkan, dan peristiwa KeyDown terjadi. Jika kunci menghasilkan karakter, KeyPress peristiwa juga terjadi.
- Pengguna memegang kunci A —peristiwa KeyDown dan KeyPress terjadi berulang kali pada laju pengulangan yang ditentukan oleh sistem operasi.
- Pengguna melepaskan tombol A, tombol tersebut diproses sebelumnya, dikirim, dan sebuah KeyUp event terjadi.
Kunci prapemrosesan
Seperti pesan lain, pesan keyboard diproses dalam metode formulir atau kontrol WndProc. Namun, sebelum pesan keyboard diproses, metode PreProcessMessage memanggil satu atau beberapa metode yang dapat digantikan untuk menangani karakter khusus dan tombol fisik. Anda dapat mengambil alih metode ini untuk mendeteksi dan memfilter kunci tertentu sebelum kontrol memproses pesan. Tabel berikut menunjukkan tindakan yang sedang dilakukan dan metode terkait yang terjadi, dalam urutan metode terjadi.
Panduan keputusan cepat untuk pencegatan keyboard
Pilih metode intersepsi yang tepat berdasarkan apa yang Anda coba tangani:
| Apa yang Anda butuhkan | Gunakan pendekatan ini |
|---|---|
| Filter input karakter (misalnya, angka saja, tanpa spasi) | Menangani KeyPress kejadian atau mengesampingkan IsInputChar |
| Mendeteksi tombol fisik (misalnya, Shift, Alt, penekanan tombol tertentu) | Menangani KeyDown atau KeyUp peristiwa |
| Menangani tombol Enter atau Tab pada elemen kontrol ketika tombol tersebut biasanya digunakan untuk navigasi | Menangani PreviewKeyDown peristiwa dan mengatur IsInputKey ke true, atau mengambil alih IsInputKey |
| Mencegat pintasan menu atau tombol perintah (misalnya, Ctrl+S) di tingkat formulir | Ganti ProcessCmdKey pada formulir |
| Tangani pintasan seluruh aplikasi sebelum kontrol menerimanya | Menerapkan IMessageFilter dan menggunakan AddMessageFilter |
Pra-pemrosesan untuk peristiwa KeyDown
| Tindakan | Metode terkait | Catatan |
|---|---|---|
| Periksa kunci perintah seperti akselerator atau pintasan menu. | ProcessCmdKey | Metode ini memproses kunci perintah, yang lebih diutamakan daripada kunci reguler. Jika metode ini mengembalikan true, pesan kunci tidak dikirim dan peristiwa kunci tidak terjadi. Jika mengembalikan false, IsInputKey dipanggil. |
| Periksa tombol khusus yang memerlukan pemrosesan awal atau tombol karakter normal yang harus menimbulkan event KeyDown dan dikirim ke elemen kontrol. | IsInputKey | Jika metode mengembalikan true, itu berarti kontrol adalah karakter reguler dan peristiwa KeyDown dinaikkan. Jika false, ProcessDialogKey dipanggil.
Catatan: Untuk memastikan kontrol mendapatkan kunci atau kombinasi kunci, Anda dapat menangani event PreviewKeyDown dan mengatur IsInputKeyPreviewKeyDownEventArgs ke true untuk kunci atau kombinasi kunci yang Anda inginkan. |
| Periksa tombol navigasi (ESC, TAB, Return, atau arrow keys). | ProcessDialogKey | Metode ini memproses kunci fisik yang menggunakan fungsionalitas khusus dalam kontrol, seperti beralih fokus antara kontrol dan induknya. Jika kontrol langsung tidak menangani kunci, ProcessDialogKey akan dipanggil pada kontrol induk, dan seterusnya hingga mencapai kontrol paling atas dalam hierarki. Jika metode ini mengembalikan true, pra-pemrosesan selesai dan peristiwa kunci tidak dihasilkan. Jika mengembalikan nilai false, peristiwa KeyDown terjadi. |
Pra-pemrosesan untuk peristiwa KeyPress
| Tindakan | Metode terkait | Catatan |
|---|---|---|
| Periksa apakah tombol adalah karakter normal yang harus diproses oleh kontrol. | IsInputChar | Jika karakter adalah karakter normal, metode ini mengembalikan true, peristiwa KeyPress dipicu dan tidak ada pemrosesan lebih lanjut yang terjadi. Jika tidak ProcessDialogChar , dipanggil. |
| Periksa apakah karakter tersebut merupakan mnemonic (seperti &OK di tombol) | ProcessDialogChar | Metode ini, mirip dengan ProcessDialogKey, dipanggil di dalam hierarki kontrol. Jika kontrol adalah kontrol kontainer, kontrol tersebut akan memeriksa mnemonik dengan memanggil fungsi ProcessMnemonic pada dirinya dan kontrol anaknya. Jika ProcessDialogChar mengembalikan true, maka peristiwa KeyPress tidak terjadi. |
Memproses pesan keyboard
Setelah pesan keyboard mencapai metode pada formulir atau kontrol, pesan tersebut diproses oleh serangkaian metode yang dapat diubah. Masing-masing metode ini mengembalikan nilai Boolean yang menentukan apakah pesan keyboard telah diproses dan digunakan oleh kontrol. Jika salah satu metode mengembalikan true, maka pesan dianggap ditangani, dan tidak diteruskan ke basis kontrol atau induk untuk pemrosesan lebih lanjut. Jika tidak, pesan tetap berada dalam antrean pesan dan mungkin diproses dalam metode lain di basis kontrol atau induk. Tabel berikut menyajikan metode yang memproses pesan keyboard.
| Metode | Catatan |
|---|---|
| ProcessKeyMessage | Metode ini memproses semua pesan keyboard yang diterima oleh metode kontrol WndProc. |
| ProcessKeyPreview | Metode ini mengirimkan pesan keyboard ke induk kontrol perangkat. Jika ProcessKeyPreview mengembalikan true, tidak ada peristiwa kunci yang dihasilkan, jika tidak, ProcessKeyEventArgs dipanggil. |
| ProcessKeyEventArgs | Metode ini memicu peristiwa KeyDown, KeyPress, dan KeyUp, sesuai kebutuhan. |
Mengganti metode keyboard
Ada banyak metode yang tersedia untuk menggantikan ketika pesan keyboard diproses sebelumnya dan diproses; namun, beberapa metode lebih baik daripada yang lain. Tabel berikut ini memperlihatkan tugas yang mungkin ingin Anda selesaikan dan cara terbaik untuk mengambil alih metode keyboard. Untuk informasi selengkapnya tentang metode penimpaan, lihat Warisan (Panduan Pemrograman C#) atau Pewarisan (Visual Basic)
| Tugas | Metode |
|---|---|
| Mencegat tombol navigasi dan memicu acara KeyDown. Misalnya, Anda ingin Tab dan Enter ditangani dalam kotak teks. | Menimpa IsInputKey. Atau, Anda dapat menangani PreviewKeyDown kejadian dan mengatur IsInputKeyPreviewKeyDownEventArgs ke true untuk kunci atau tombol yang Anda inginkan. |
| Lakukan penanganan input atau navigasi khusus pada elemen kontrol. Misalnya, Anda ingin penggunaan tombol panah dalam kontrol daftar Anda untuk mengubah item yang dipilih. | Mengambil alih ProcessDialogKey |
| Mencegat tombol navigasi dan memicu acara KeyPress. Misalnya dalam kontrol kotak putar, Anda ingin beberapa penekanan tombol panah untuk mempercepat kemajuan melalui item. | Menimpa IsInputChar. |
| Lakukan penanganan input atau navigasi khusus selama peristiwa KeyPress. Misalnya, dalam kontrol daftar, menahan tombol R melewati item yang dimulai dengan huruf r. | Mengambil alih ProcessDialogChar |
| Melakukan penanganan mnemonik kustom; misalnya, Anda ingin menangani mnemonik pada tombol yang digambar sendiri oleh pemilik yang terkandung dalam toolbar. | Menimpa ProcessMnemonic. |
Batasan input papan ketik pada tingkat formulir
Saat menangani input keyboard pada tingkat formulir, waspadai pengecualian pra-pemrosesan. Tidak semua tombol mencapai penangan tingkat formulir saat KeyPreview diatur ke true. Kunci perintah, kunci dialog, dan kunci yang dikonsumsi oleh kontrol terfokus mungkin melewati penangan aktivitas sepenuhnya. Untuk detail tentang pengecualian ini dan cara mencegat kunci pada tahap pra-pemrosesan, lihat Kapan KeyPreview tidak cukup.
Lihat juga
.NET Desktop feedback