Слияние элементов меню в элементе управления MenuStrip в Windows Forms

Если у вас есть приложение MDI, можно объединить пункты меню или целые меню из дочерней формы в меню родительской формы.

В этом разделе описываются основные понятия, связанные с объединением элементов меню в приложении MDI.

общие понятия

Процедуры слияния включают как целевой объект, так и управление версиями:

  • Целевой объект — это элемент управления MenuStrip в основной или родительской форме MDI, в которой объединяются элементы меню.

  • Источником является элемент управления MenuStrip в дочерней форме MDI, содержащей пункты меню, которые необходимо объединить в целевое меню.

Свойство MdiWindowListItem определяет пункт меню, раскрывающийся список которого будет заполнен заголовками дочерних элементов MDI текущей родительской формы MDI. Например, обычно перечисляются дочерние элементы MDI, открытые в меню Окно.

Свойство IsMdiWindowListEntry определяет, какие пункты меню поступают из MenuStrip в дочерней форме MDI.

Пункты меню можно объединить вручную или автоматически. Пункты меню объединяются одинаково для обоих методов, но слияние активируется по-разному, как описано в разделах "Слияние вручную" и "Автоматическое слияние" далее в этом разделе. При ручном и автоматическом слиянии каждое действие влияет на следующее действие.

Слияние MenuStrip перемещает пункты меню от одного ToolStrip к другому, а не клонирует их, как MainMenu.

Значения MergeAction

Действие слияния для пунктов меню в источнике MenuStrip задается с помощью свойства MergeAction.

В следующей таблице описано значение и типичное использование доступных действий слияния.

Значение MergeAction Description Типичное применение
Append (по умолчанию) Добавляет исходный пункт в конец целевой коллекции пунктов. Добавление пунктов меню в конец меню при активации какой-то части программы.
Insert Добавляет исходный пункт в целевую коллекцию пунктов в расположении, указанном свойством MergeIndex, заданным в исходном пункте. Добавление пунктов меню в середину или начало меню при активации какой-то части программы.

Если значение MergeIndex одинаково для обоих пунктов меню, они добавляются в обратном порядке. Задайте правильное значение MergeIndex, чтобы сохранить исходный порядок.
Replace Находит текстовое совпадение или использует значение MergeIndex, если совпадение не найдено, а затем заменяет соответствующий целевой пункт меню на исходный пункт меню. Замена целевого пункта меню исходным пунктом меню с тем же именем, но другой функцией.
MatchOnly Находит текстовое совпадение или использует значение MergeIndex, если совпадение не найдено, а затем добавляет все пункты раскрывающегося списка из источника в целевой объект. Создание структуры меню, которая вставляет или добавляет пункты меню в подменю или удаляет пункты меню из подменю. Например, можно добавить пункт меню из дочернего элемента MDI в главное меню MenuStripСохранить как.

MatchOnly позволяет перемещаться по структуре меню без каких-либо действий. Предоставляет способ оценки последующих элементов.
Remove Находит текстовое совпадение или использует значение MergeIndex, если совпадение текста не найдено, а затем удаляет элемент из целевого объекта. Удаление пункта меню из целевого объекта MenuStrip.

Слияние вручную

Только элементы управления MenuStrip участвуют в автоматическом слиянии. Чтобы объединить элементы других элементов управления, таких как ToolStrip и StatusStrip, их необходимо объединить вручную, вызвав методы Merge и RevertMerge в коде при необходимости.

Автоматическое слияние

Автоматическое слияние для приложений MDI можно использовать, активировав исходную форму. Чтобы использовать MenuStrip в приложении MDI, задайте для свойства MainMenuStrip целевое значение MenuStrip, чтобы слияние действий, выполняемых в источнике MenuStrip, отражалось в целевом объекте MenuStrip.

Автоматическое слияние можно активировать, запустив MenuStrip в источнике MDI. После активации источник MenuStrip вливается в целевой объект MDI. Когда новая форма становится активной, слияние отменяется в последней форме и активируется в новой. Вы можете управлять этим поведением, задав свойство MergeAction по мере необходимости для каждого ToolStripItem, а также свойство AllowMerge для каждого MenuStrip.

См. также