允许快捷键由父表单处理

时间:2013-02-08 06:33:47

标签: c# winforms keyboard-shortcuts keypress

场景:我创建了一个表单(Mainform),它是应用程序的父表单或主机表单 - 类似于Outlook中的主屏幕。

我在菜单栏项下创建了一个BarItem( Help ),并使用Shortcut属性为其分配了快捷键 F1

但如果Mainform以外的任何其他形式获得焦点,则快捷键不会到达Mainform。我该如何解决这个问题?

我无法为从Mainform启动的所有表单订阅按键事件。

类似方案:例如,当您转到Microsoft Outlook中的任何窗口并按 F1 时,它将启动一个帮助窗口,而不管窗体是否被打开.I想要类似的行为。

3 个答案:

答案 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