我在我正在开发的WinForms应用程序中遇到了一个相当有趣的事件。似乎当我将DropDownItem添加到ToolStripMenuItem时,父菜单项上的快捷键消失。而且不只是快捷键没有显示,它根本不再注册按键。如果我删除子菜单项,快捷键将返回。令人惊讶的是,设计师看起来一切都很好,直到运行时才会发生这种情况。
设计师中的菜单:
运行时的相同菜单:
有谁知道为什么会这样,我怎么能阻止它?为了澄清,单击父菜单执行的功能与单击子菜单不同,因此移动快捷方式是不够的。如果我手动单击菜单,则按预期执行所有功能。它只是不再有效的快捷键。
答案 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并手动处理绘图。