3

モデルダイアログとして表示されるWindowsフォームがあります。クラスのコンテキストメニューがありますContextMenuStrip。コンテキストメニューのいくつかの項目にショートカットを設定しました。ただし、このショートカットは、コンテキストメニューが表示されている場合にのみ機能します。コンテキストメニューがアクティブになっていない場合でも、それらを機能させるにはどうすればよいですか?

私が知っている唯一の方法KeyPressは、フォームのイベントを処理し、コンテキストメニューのすべての項目を再帰的に繰り返し、そのShortcutKeysプロパティを実際に押されたキーと比較することです。OnClick一致する場合は、このアイテムのイベントを手動で呼び出します。より良いアイデアはありますか?

4

3 に答える 3

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 に答える
1

ContextMenuStripコードで開いていますか、それとも作成したセットのContextMenuStripプロパティですか? コードで開いている場合、代わりにプロパティを設定できますか? これにより、最初にメニューを開かなくてもショートカットを実行できるようになります。FormContextMenuStripForm

于 2012-09-11T18:32:00.960 に答える