我有一个显示为模型对话框的Windows窗体。它有一个类ContextMenuStrip
的上下文菜单。我在上下文菜单中设置了几个项目的快捷方式。但此快捷方式仅在显示上下文菜单时有效。即使没有激活上下文菜单,如何使它们工作?
我知道的唯一方法是处理表单的KeyPress
事件,递归遍历上下文菜单中的所有项目,并将其ShortcutKeys
属性与按下的实际键进行比较。如果匹配,请手动为此项目调用OnClick
事件。有更好的想法吗?
答案 0 :(得分:2)
使用ToolStripMenuItem.ShortCutKeys属性,这样就不需要迭代并调用事件处理程序。
示例代码:
ContextMenuStrip _contextMenuStrip = new ContextMenuStrip();
var menuItem = new ToolStripMenuItem("Copy");
menuItem.ShortcutKeys = Keys.Control | Keys.C;
_contextMenuStrip.Items.Add(menuItem);
答案 1 :(得分:1)
您是在代码中打开ContextMenuStrip
还是ContextMenuStrip
设置为您创建的Form
的{{1}}属性?如果它是在代码中打开的,您是否可以设置ContextMenuStrip
属性?这应该让你在不必先打开菜单的情况下进行快捷方式。
答案 2 :(得分:1)
最后,我在KeyPressed
事件处理程序中实现了手动迭代:
Action<ToolStripMenuItem> check_shortcut = null;
check_shortcut = (node) =>
{
if (node.ShortcutKeys == e.KeyData)
{
node.PerformClick();
}
foreach (ToolStripMenuItem child in node.DropDownItems)
{
check_shortcut(child);
}
};
foreach (ToolStripMenuItem item in MyContextMenuStrip.Items)
{
check_shortcut(item);
}