Я ищу лучший способ реализовать общие сочетания клавиш Windows (например, Ctrl+ F, Ctrl+ N) в моем приложении Windows Forms в C #.
Приложение имеет основную форму, которая содержит много дочерних форм (по одной). Когда пользователь нажимает Ctrl+ F, я хотел бы показать пользовательскую форму поиска. Форма поиска будет зависеть от текущей открытой дочерней формы в приложении.
Я думал об использовании чего-то подобного в событии ChildForm_KeyDown :
if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
// Show search form
Но это не работает. Событие даже не срабатывает при нажатии клавиши. Каково решение?
c#
winforms
keyboard-shortcuts
Rockcoder
источник
источник
Ответы:
Возможно, вы забыли установить для свойства KeyPreview формы значение True. Переопределение метода ProcessCmdKey () является общим решением:
источник
KeyPreview
это совершенно необходимо. Например, при нажатии на ярлык требуется подавить ввод, но, тем не менее, разрешить запуск отдельногоMenuStrip
события.ProcessCmdKey
подход заставил бы дублировать логику запуска событий.На вашей основной форме
KeyPreview
в TrueДобавьте обработчик события KeyDown с помощью следующего кода
источник
Лучший способ - использовать мнемонику меню, то есть иметь пункты меню в основной форме, которым назначены нужные сочетания клавиш. Затем все остальное обрабатывается внутренне, и все, что вам нужно сделать, это реализовать соответствующее действие, которое выполняется в
Click
обработчике события этого пункта меню.источник
menu mnemonics
реальный образец?Вы даже можете попробовать этот пример:
источник
Если у вас есть меню, то изменение
ShortcutKeys
свойстваToolStripMenuItem
должно помочь.Если нет, вы можете создать его и установить для его
visible
свойства значение false.источник
Из основной формы вы должны:
Кроме того, я нашел это в Google, и я хотел бы поделиться этим с теми, кто все еще ищет ответы. (для глобального)
Я думаю, что вы должны использовать user32.dll
Далее читайте это http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/
источник
Кто-то новичок в этом вопросе может немного облегчить ответ Ханса , так что вот моя версия.
Вам не нужно дурачиться
KeyPreview
, оставьте его установленным наfalse
. Чтобы использовать приведенный ниже код, просто вставьте его под свойform1_load
и запустите, F5чтобы увидеть, как он работает:источник
В WinForm мы всегда можем получить статус управляющего ключа:
источник