Объединение меню
Меню следует объединять во время выполнения, «слив» их элементы в одно меню. Объединять можно элементы управления MenuStrip и ContextMenuStrip. Вы даже можете объединить MenuStrip с ToolStrip. Подобно объединению панелей инструментов, объединение меню осуществляется путем вызова метода ToolStnpManager.Merge статического класса ToolStripManager, как показано ниже:
В этом примере первое меню (sourceToolStrip) объединяют со вторым (targetToolStrip). При этом элементы меню sourceToolStrip объединяются с элементами targetToolStrip, так как это определено значением их свойства MergeAction. Табл. 9-2 суммирует действия по объединению, которые происходят при соответствующем значении свойства MergeAction.
Табл. 9-2. Значения свойства MergeAction ToolStripItem и действия по объединению
Значение свойства |
Действие |
Append |
Добавляет элемент в конец списка элементов |
Insert |
Вставляет элемент в позицию указанную свойством |
|
Mergelndex |
MatchOnly |
Ищет совпадения, но не выполняет никаких действий |
Remove |
Если совпадающий элемент панели инструментов найден, |
|
он удаляется из образованной панели инструментов |
Replace |
Если совпадающий элемент панели инструментов найден, |
|
он заменяется данной панелью инструментов |
При объединении панелей инструментов каждый элемент исходной панели инструментов сравнивается с каждым элементом выходной панели инструментов. Это сравнение основывается на свойстве Text каждого элемента меню. Таким образом, если любые два элемента меню имеют одинаковое свойство Text, они будут рассматриваться как совпадающие. Если совпадение найдено, а свойству MergeAction элемента из исходной панели инструментов задано значение MatchOnly, Remove или Replace, тогда будет выполнено соответствующее действие. Во всех остальных случаях элемент меню будет добавлен или вставлен в зависимости от значения свойства MergeAction.
Чтобы объединение панелей инструментов прошло успешно, их свойствам AllowMerge должно быть присвоено значение True.
Переключение между меню программным способом
По мере того как условия работы приложения изменяются, добавления или удаления элементов меню все меньше отвечают потребностям вашего приложения. Рано или поздно вы захотите заменить меню целиком. Вы можете полностью удалить элемент управления MenuStrip из формы, удалив его из коллекции Controls, и точно так же добавить новый элемент управления MenuStrip. Следующий пример демонстрирует, как во время выполнения удалять из формы MenuStrip 1 и заменять его MenuStrip2:
Имейте в виду, что добавляемое меню не должно быть элементом коллекции Controls.
Контекстные меню и элемент управления ContextMenuStrip
Контекстные меню знакомы всем пользователям приложений Windows Forms. Эти «быстрые» меню отображаются при щелчке правой кнопкой мышки объекта. Элемент управления ContextMenuStrip позволяет создавать контекстные меню и привязывать их к определенным объектам.
Рассматриваемый элемент управления похож на MenuStrip. Оба элемента управления имеют интуитивный интерфейс разработки, который позволяет быстро создавать элементы меню. Кроме того, они содержат коллекцию элементов меню, которую можно получить с помощью свойства Items. Основным отличием между этими элементами управления является то, что ContextMenuStrip не имеет меню верхнего уровня и во время выполнения не отображается до тех пор, пока вы его не вызовите щелчком правой кнопкой мыши элемента управления, привязанного к данному контекстному меню.