Bagikan melalui


Cara Kerja Input Keyboard

Formulir Windows memproses input keyboard dengan menaikkan peristiwa keyboard sebagai respons terhadap pesan Windows. Sebagian besar aplikasi Formulir Windows memproses input keyboard secara eksklusif dengan menangani peristiwa keyboard. Namun, Anda perlu memahami cara kerja pesan keyboard sehingga Anda dapat menerapkan skenario input keyboard yang lebih canggih, seperti mencegat tombol sebelum mencapai kontrol. Topik ini menjelaskan jenis data utama yang Formulir Windows kenali dan memberikan gambaran umum tentang bagaimana pesan keyboard dirutekan. Untuk informasi tentang peristiwa keyboard, lihat Menggunakan Peristiwa Keyboard.

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 pesan Windows WM_KEYDOWN dan WM_SYSKEYDOWN. Anda dapat mendeteksi sebagian besar penekanan tombol fisik dengan menangani KeyDown peristiwa atau KeyUp . Kunci karakter adalah subset 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 KeyPress peristiwa. 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.

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 Mengambil alih properti dan metode dalam kelas turunan.

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