Сделайте бесконечную серию меню в C#
Во время разработки я дал программе главное меню Инструменты с пунктом меню «Инструменты». Оба эти пункта меню используют следующий DropDownOpening обработчик событий, чтобы действовать, когда они открываются.
// Этот пункт меню открывается.
// Добавить элемент в подменю этого элемента.
private void mnuTools_DropDownOpening(object sender, EventArgs e)
{
Console.WriteLine("mnuTools_DropDownOpening");
// Удаление обработчика события этого элемента.
ToolStripMenuItem menu = sender as ToolStripMenuItem;
menu.DropDownOpening -= mnuTools_DropDownOpening;
// Найти подменю.
ToolStripMenuItem submenu =
(ToolStripMenuItem)menu.DropDownItems[0];
// Добавить элемент подменю.
ToolStripMenuItem new_item = new ToolStripMenuItem("&Tools");
new_item.DropDownOpening += mnuTools_DropDownOpening;
submenu.DropDownItems.Add(new_item);
}
Этот обработчик событий обнаруживает пункт меню, который открывается и удаляет обработчик события, поэтому этот код не будет снова выполнен для этого элемента позже.
Затем он находит отдельный подпункт элемента. Этот элемент еще не открыт и еще не содержит каких-либо подпозиций, поэтому, если код ничего не сделал, подпункт будет отображаться как обычный пункт меню, а не каскадное меню. Чтобы исправить это, код добавляет новый элемент меню в подпункт. Он устанавливает обработчик события DropDownOpening нового элемента тем же, что используется другими элементами меню, чтобы он мог продолжить игру, когда он в конце концов открывается.
