我正在寻找在C#中的Windows Forms应用程序中实现常用Windows键盘快捷键(例如Ctrl F,Ctrl N)的最佳方法 .
该应用程序有一个主窗体,可以容纳许多子窗体(一次一个) . 当用户点击Ctrl F时,我想显示自定义搜索表单 . 搜索表单取决于应用程序中当前打开的子表单 .
我想在ChildForm_KeyDown事件中使用这样的东西:
if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
// Show search form
但这不起作用 . 按键时,事件甚至不会触发 . 解决办法是什么?
11 回答
您可能忘记将表单的KeyPreview属性设置为True . 覆盖ProcessCmdKey()方法是通用解决方案:
在您的主表单上
将
KeyPreview
设为True使用以下代码添加KeyDown事件处理程序
最好的方法是使用菜单助记符,即在主窗体中为菜单条目分配所需的键盘快捷键 . 然后其他所有内容都在内部处理,您所要做的就是实现在该菜单项的
Click
事件处理程序中执行的相应操作 .你甚至可以尝试这个例子:
如果您有一个菜单,那么更改
ToolStripMenuItem
的ShortcutKeys
属性应该可以解决问题 .如果没有,您可以创建一个并将其
visible
属性设置为false .对于刚来这个的人来说,Hans's answer可以变得容易一点,所以这是我的版本 .
你不需要愚弄
KeyPreview
,把它设置为false
. 要使用下面的代码,只需将其粘贴到form1_load
下面并使用F5运行即可使用:从主表单中,您必须:
确保将 KeyPreview 设置为 true (默认为TRUE)
添加 MainForm_KeyDown (..) - 您可以在此处设置所需的任何快捷方式 .
此外,我在谷歌上发现了这一点,我想与那些仍在寻找答案的人分享 . (适用于全球)
我想你必须使用user32.dll
进一步阅读http://www.fluxbytes.com/csharp/how-to-register-a-global-hotkey-for-your-application-in-c/
在WinForm中,我们始终可以通过以下方式获取Control Key状态:
请不要删除此评论