3

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

设计器中的菜单:

设计师视图

运行时相同的菜单:

运行时视图

有谁知道为什么会发生这种情况以及如何防止它?需要澄清的是,单击父菜单执行的功能与单击子菜单不同,因此移动快捷方式是不够的。如果我手动单击菜单,所有功能都会按预期执行。它只是不再起作用的快捷键。

4

3 回答 3

0

据我所知,完成这项工作的唯一方法是将 ToolStripMenuItem 子类化并手动处理绘图。

于 2012-11-24T16:56:58.633 回答
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
    }
}

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

于 2012-11-10T17:53:46.623 回答
0

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

于 2012-11-10T18:12:20.730 回答