Saya mencari cara terbaik untuk mengimplementasikan pintasan keyboard Windows umum (misalnya Ctrl+ F, Ctrl+ N) di aplikasi Windows Forms saya di C #.
Aplikasi ini memiliki formulir utama yang menampung banyak formulir anak (satu per satu). Ketika seorang pengguna menekan Ctrl+ F, saya ingin menampilkan formulir pencarian khusus. Formulir pencarian akan tergantung pada formulir anak terbuka saat ini dalam aplikasi.
Saya sedang berpikir untuk menggunakan sesuatu seperti ini di acara ChildForm_KeyDown :
if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
// Show search form
Tetapi ini tidak berhasil. Acara bahkan tidak menyala ketika Anda menekan tombol. Apa solusinya?
c#
winforms
keyboard-shortcuts
Rockcoder
sumber
sumber
Jawaban:
Anda mungkin lupa mengatur properti KeyPreview formulir ke True. Mengganti metode ProcessCmdKey () adalah solusi umum:
sumber
KeyPreview
sangat diperlukan. Sebagai contoh, ketika menekan jalan pintas diperlukan untuk menekan input tetapi tetap membiarkanMenuStrip
acara terpisah menyala.ProcessCmdKey
Pendekatan akan memaksa duplikasi logika penembakan acara.Di formulir Utama Anda
KeyPreview
ke TrueTambahkan KeyDown event handler dengan kode berikut
sumber
Cara terbaik adalah dengan menggunakan menu mnemonics, yaitu memiliki entri menu dalam bentuk utama Anda yang ditugaskan pintasan keyboard yang Anda inginkan. Kemudian semua hal lain ditangani secara internal dan yang harus Anda lakukan adalah mengimplementasikan tindakan yang sesuai yang dijalankan dalam
Click
event handler dari entri menu tersebut.sumber
menu mnemonics
sampel nyata?Anda bahkan dapat mencoba contoh ini:
sumber
Jika Anda memiliki menu maka mengubah
ShortcutKeys
propertiToolStripMenuItem
harus melakukan trik.Jika tidak, Anda bisa membuatnya dan mengatur
visible
propertinya menjadi false.sumber
Dari Formulir utama, Anda harus:
Selain itu, saya telah menemukan ini di google dan saya ingin membagikan ini kepada mereka yang masih mencari jawaban. (untuk global)
Saya pikir Anda harus menggunakan user32.dll
Bacalah lebih lanjut http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/
sumber
Jawaban Hans dapat dibuat sedikit lebih mudah bagi seseorang yang baru dalam hal ini, jadi inilah versi saya.
Anda tidak perlu dibodohi
KeyPreview
, biarkan diaturfalse
. Untuk menggunakan kode di bawah ini, cukup tempel di bawahform1_load
dan jalankan dengan F5untuk melihatnya berfungsi:sumber
Di WinForm, kami selalu bisa mendapatkan status Kunci Kontrol dengan:
sumber