场景:我创建了一个表单(Mainform
),它是应用程序的父表单或主机表单 - 类似于Outlook中的主屏幕。
我在菜单栏项下创建了一个BarItem( Help ),并使用Shortcut属性为其分配了快捷键 F1 。
但如果Mainform
以外的任何其他形式获得焦点,则快捷键不会到达Mainform
。我该如何解决这个问题?
我无法为从Mainform
启动的所有表单订阅按键事件。
类似方案:例如,当您转到Microsoft Outlook中的任何窗口并按 F1 时,它将启动一个帮助窗口,而不管窗体是否被打开.I想要类似的行为。
答案 0 :(得分:1)
在主窗体上(如果愿意,请确保父窗体)确保属性KeyPreview
设置为true
答案 1 :(得分:1)
您可以按照我的评论中的说法实现这一点,只需使用KeyUp Event
即可Form
,且属性必须为KeyPreview = true
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F1)
{
//do stuff
}
}
答案 2 :(得分:1)
消息过滤器可能有帮助,并且在您的案例中使用是一种适当的方法。 看看这些: http://msdn.microsoft.com/en-us/library/system.windows.forms.imessagefilter.aspx http://msdn.microsoft.com/en-us/library/system.windows.forms.application.addmessagefilter.aspx
以下是向上和向下箭头键的消息过滤器示例 https://stackoverflow.com/a/8257039/818321