Bagikan melalui


Gambaran umum penggunaan keyboard (Formulir Windows .NET)

Dalam 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 akan 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.

Penting

Dokumentasi Panduan Desktop untuk .NET 7 dan .NET 6 sedang dibangun.

Peristiwa keyboard

Semua kontrol Formulir Windows mewarisi serangkaian peristiwa yang terkait dengan mouse dan input keyboard. Misalnya, kontrol dapat menangani KeyPress peristiwa untuk menentukan kode karakter tombol yang ditekan. Untuk informasi selengkapnya, lihat Menggunakan peristiwa keyboard.

Metode yang memproses pesan input pengguna

Formulir dan kontrol memiliki akses ke IMessageFilter antarmuka dan serangkaian metode yang dapat diganti yang memproses pesan Windows di titik yang berbeda dalam antrean pesan. Semua metode ini memiliki Message parameter, 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 EnableNotifyMessage gaya harus diatur agar metode ini dipanggil.

Pesan keyboard dan mouse juga diproses oleh sekumpulan 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 bitwiseKeys. Keys Dengan enumerasi, Anda dapat menggabungkan serangkaian tombol yang ditekan untuk menghasilkan satu nilai. Nilai-nilai ini sesuai dengan nilai yang menyertai WM_KEYDOWN dan WM_SYSKEYDOWN pesan Windows. Anda dapat mendeteksi sebagian besar penekanan tombol fisik dengan menangani KeyDown peristiwa atau KeyUp . Kunci karakter adalah subset enumerasi Keys 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 KeyPress peristiwa.

Urutan peristiwa keyboard

Seperti yang tercantum sebelumnya, ada 3 peristiwa terkait keyboard yang dapat terjadi pada kontrol. Urutan berikut menunjukkan urutan umum peristiwa:

  1. Pengguna mendorong kunci "a", kunci diproses sebelumnya, dikirim, dan KeyDown peristiwa terjadi.
  2. Pengguna memegang kunci "a", kunci telah diproseksi sebelumnya, dikirim, dan KeyPress peristiwa terjadi. Kejadian ini terjadi beberapa kali saat pengguna memegang kunci.
  3. Pengguna merilis kunci "a", kunci telah diproseksi sebelumnya, dikirim, dan KeyUp peristiwa terjadi.

Kunci prapemroscesan

Seperti pesan lain, pesan keyboard diproses dalam WndProc metode formulir atau kontrol. Namun, sebelum pesan keyboard diproses, PreProcessMessage metode memanggil satu atau beberapa metode yang dapat ditimpa untuk menangani kunci karakter khusus dan kunci fisik. Anda dapat mengambil alih metode ini untuk mendeteksi dan memfilter kunci tertentu sebelum pesan diproses oleh kontrol. Tabel berikut menunjukkan tindakan yang sedang dilakukan dan metode terkait yang terjadi, dalam urutan metode terjadi.

Pra-pemrosesan untuk peristiwa KeyDown

Perbuatan 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 kunci khusus yang memerlukan pra-pemrosesan atau kunci karakter normal yang harus menaikkan KeyDown peristiwa dan dikirim ke kontrol. IsInputKey Jika metode mengembalikan true, itu berarti kontrol adalah karakter biasa dan KeyDown peristiwa dinaikkan. Jika false, ProcessDialogKey dipanggil. Catatan: Untuk memastikan kontrol mendapatkan kunci atau kombinasi kunci, Anda dapat menangani PreviewKeyDown peristiwa dan set IsInputKeyPreviewKeyDownEventArgs ke true untuk kunci atau 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 dipanggil pada kontrol induk dan sebagainya ke kontrol paling atas dalam hierarki. Jika metode ini mengembalikan true, pra-pemrosesan selesai dan peristiwa kunci tidak dihasilkan. Jika mengembalikan false, KeyDown peristiwa akan terjadi.

Pra-pemrosesan untuk peristiwa KeyPress

Perbuatan Metode terkait Catatan
Periksa untuk melihat kunci adalah karakter normal yang harus diproses oleh kontrol IsInputChar Jika karakter adalah karakter normal, metode ini mengembalikan true, KeyPress peristiwa dinaikkan dan tidak ada prapemroscesan lebih lanjut yang terjadi. Jika tidak ProcessDialogChar , akan dipanggil.
Periksa untuk melihat apakah karakter adalah mnemonic (seperti &OK pada tombol) ProcessDialogChar Metode ini, mirip ProcessDialogKeydengan , akan dipanggil ke hierarki kontrol. Jika kontrol adalah kontrol kontainer, kontrol tersebut memeriksa mnemonics dengan memanggil ProcessMnemonic dirinya sendiri dan kontrol turunannya. Jika ProcessDialogChar mengembalikan true, KeyPress peristiwa tidak terjadi.

Memproses pesan keyboard

Setelah pesan keyboard mencapai WndProc metode formulir atau kontrol, pesan tersebut diproses oleh sekumpulan metode yang dapat ditimpa. Masing-masing metode ini mengembalikan nilai yang Boolean 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 dapat 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 WndProc metode kontrol.
ProcessKeyPreview Metode ini mengirimkan pesan keyboard ke induk kontrol. Jika ProcessKeyPreview mengembalikan true, tidak ada peristiwa kunci yang dihasilkan, jika tidak ProcessKeyEventArgs dipanggil.
ProcessKeyEventArgs Metode ini meningkatkan KeyDownperistiwa , KeyPress, dan KeyUp , sebagaimana mewajibkan.

Mengesampingkan metode keyboard

Ada banyak metode yang tersedia untuk mengambil alih ketika pesan keyboard telah diproses dan diproses; namun, beberapa metode adalah pilihan yang jauh 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)

Task Metode
Mencegat kunci navigasi dan menaikkan KeyDown peristiwa. Misalnya Anda ingin TAB dan Kembali ditangani dalam kotak teks. Ambil alih IsInputKey. Catatan: Atau, Anda dapat menangani PreviewKeyDown peristiwa dan set IsInputKeyPreviewKeyDownEventArgs ke true untuk kunci atau kunci yang Anda inginkan.
Lakukan penanganan input atau navigasi khusus pada kontrol. Misalnya, Anda ingin penggunaan tombol panah dalam kontrol daftar Anda untuk mengubah item yang dipilih. Menimpa ProcessDialogKey
Mencegat kunci navigasi dan menaikkan KeyPress peristiwa. Misalnya dalam kontrol kotak putar, Anda ingin beberapa penekanan tombol panah untuk mempercepat kemajuan melalui item. Ambil alih IsInputChar.
Lakukan penanganan input atau navigasi khusus selama KeyPress peristiwa. Misalnya, dalam kontrol daftar yang menahan tombol "r" melompat di antara item yang dimulai dengan huruf r. Menimpa ProcessDialogChar
Melakukan penanganan mnemonik kustom; misalnya, Anda ingin menangani mnemonics pada tombol yang digambar pemilik yang terkandung dalam toolbar. Ambil alih ProcessMnemonic.

Baca juga