添加子菜单删除快捷键

时间:2012-11-10 17:25:53

标签: c# winforms menu keyboard-shortcuts menuitem

我在我正在开发的WinForms应用程序中遇到了一个相当有趣的事件。似乎当我将DropDownItem添加到ToolStripMenuItem时,父菜单项上的快捷键消失。而且不只是快捷键没有显示,它根本不再注册按键。如果我删除子菜单项,快捷键将返回。令人惊讶的是,设计师看起来一切都很好,直到运行时才会发生这种情况。

设计师中的菜单:

Designer View

运行时的相同菜单:

Runtime View

有谁知道为什么会这样,我怎么能阻止它?为了澄清,单击父菜单执行的功能与单击子菜单不同,因此移动快捷方式是不够的。如果我手动单击菜单,则按预期执行所有功能。它只是不再有效的快捷键。

3 个答案:

答案 0 :(得分:0)

不确定为什么会发生这种情况,但您始终可以在当前PreviewKeyDown内定义新的Form事件,并查看按下的键是否与菜单项快捷键匹配。因此,当按下一个或多个键时,您将能够执行您想要的命令。

示例

public Form1()
{
    InitializeComponent();
    PreviewKeyDown += new PreviewKeyDownEventHandler(Form1_PreviewKeyDown); //Link the PreviewKeyDown event of the current Form to Form1_PreviewKeyDown
}

private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.D7) //Indicates whether Ctrl and 7 are pressed (These are our hotkeys)
    {
        //DoSomething
    }
}

谢谢, 我希望你觉得这很有帮助:)

答案 1 :(得分:0)

我认为快捷键仅适用于没有子项的菜单项。所以在运行时它不可见,因为编译器预测它的菜单带有子菜单。

答案 2 :(得分:0)

从我能够收集的内容来看,实现这项工作的唯一方法是继承ToolStripMenuItem并手动处理绘图。