Сделайте бесконечную серию меню в 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 нового элемента тем же, что используется другими элементами меню, чтобы он мог продолжить игру, когда он в конце концов открывается.