3

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

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

4

3 回答 3

4

使用 ToolStripMenuItem.ShortCutKeys 属性,这样您就无需迭代和调用事件处理程序。

示例代码:

ContextMenuStrip _contextMenuStrip = new ContextMenuStrip();
var menuItem = new ToolStripMenuItem("Copy");
menuItem.ShortcutKeys = Keys.Control | Keys.C;
_contextMenuStrip.Items.Add(menuItem);
于 2013-06-05T09:35:52.803 回答
1

您是在打开ContextMenuStripin 代码还是将集合的ContextMenuStrip属性Form设置为ContextMenuStrip您创建的?如果它是在代码中打开的,你可以设置Form属性吗?那应该让您无需先打开菜单即可执行快捷方式。

于 2012-09-11T18:32:00.960 回答
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);
  }
于 2012-09-19T15:57:03.297 回答