Речь идет о путанице между & (клавишей быстрого доступа для пункта меню) и комбинацией клавиш, также известной как клавиатурные ускорители , которая обрабатывается по окнам и обеспечивает непосредственное выполнение команды меню .
Если быстрая клавиша не была указана явно (с & как вы уже сделали для "New"), инициалы автоматически становятся клавишей быстрого доступа с ALT.
Это потому, что когда доступ к элементу меню осуществляется нажатием последовательных клавиш (а не комбинации), метод ToolStripDropDown.ProcessDialogKey обрабатывает его, выбирает соответствующий элемент меню в раскрывающемся меню и запускает событие click.
Когда для элемента меню назначается клавиатурный ускоритель, ToolStripManager.ProcessCmdKey обрабатывает его, находит и вызывает целевой пункт меню.
Это причина поведения, которое вы переживают, и это по замыслу.
Вы можете убедиться в этом сами, просто взломав свой электронный обработчик сброса и путем изучения стека вызовов, когда он вызывается через ALT + F и + N, а затем на этот раз назначенным клавишным ускорителем, скажем прямо ALT + N.
Рассмотрим добавление следующих новых пунктов меню Ваша форма.
private static ToolStripMenuItem projectMenu = new ToolStripMenuItem();
private static ToolStripMenuItem projectPropertiesMenuItem = new ToolStripMenuItem();
И они заполняются следующим образом:
projectMenu.Text = "Project";
projectPropertiesMenuItem.Text = "Properties";
projectPropertiesMenuItem.Click += new EventHandler(button_Click);
menuStrip.Items.Add(projectMenu);
projectMenu.DropDownItems.Add(projectPropertiesMenuItem);
Вы можете видеть, что при запуске формы ALT + P активирует новое меню, даже если мы не указали ярлык для него. ToolStripMenuItem обрабатывает это автоматически.
Но мы можем назначить ускоритель клавиатуры для нашего пункта меню следующим образом:
projectPropertiesMenuItem.ShortcutKeys = Keys.Alt | Keys.P;
Который
- Удаляет обработку ярлыков ALT + P у владельца;
- Устанавливает глобальный ярлык для вложенного пункта меню;
- , а также показывает его рядом с текстом меню (бонус)
![enter image description here](https://i.stack.imgur.com/JkcQa.png)