处理上下文菜单中的快捷方式

时间:2012-08-25 21:32:18

标签: c# winforms events keyboard-shortcuts contextmenu

我有一个显示为模型对话框的Windows窗体。它有一个类ContextMenuStrip的上下文菜单。我在上下文菜单中设置了几个项目的快捷方式。但此快捷方式仅在显示上下文菜单时有效。即使没有激活上下文菜单,如何使它们工作?

我知道的唯一方法是处理表单的KeyPress事件,递归遍历上下文菜单中的所有项目,并将其ShortcutKeys属性与按下的实际键进行比较。如果匹配,请手动为此项目调用OnClick事件。有更好的想法吗?

3 个答案:

答案 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);
  }