Объединить элементы полосы меню для окон MDI

Как я могу объединить пункты меню родительской формы и дочерней формы с одинаковым именем меню?


person fariba    schedule 18.08.2010    source источник


Ответы (1)


Установите MergeAction пунктов меню на «MatchOnly».

Добавлено

Поскольку это может быть немного сложно, я добавлю список шагов, чтобы сделать простой пример.

  • Создайте новое приложение Windows Forms.
  • Добавьте новую форму Windows и оставьте ее имя Form2.
  • Откройте конструктор Form1 (если он еще не открыт).
  • Нажмите на форму и установите для параметра IsMdiContainer Form1 значение True.
  • Откройте панель инструментов и добавьте MenuStrip в форму Form1.
  • В поле «Введите здесь» введите &Файл
  • В подпункте «Введите здесь» введите A
  • В подпункте «Введите здесь» введите B
  • В вашем контейнере MDI (Form1) должно быть меню «Файл» с элементами A и B.
  • Дважды щелкните элемент A, чтобы добавить обработчик кликов.
  • Добавьте new Form2 { MdiParent = this }.Show(); в метод обработчика.
  • Откройте конструктор Form2.
  • Откройте панель инструментов и добавьте MenuStrip в Form2.
  • Примечание. См. ниже информацию о свойстве Visible в Form2 MenuStrip, для которого на данном этапе можно установить значение False.
  • В поле «Введите здесь» введите &Файл
  • В подпункте «Введите здесь» введите C
  • Ваш дочерний MDI (Form2) должен иметь меню «Файл» с пунктом C.
  • Нажмите на пункт меню «Файл» и в окне «Свойства» установите для MergeAction значение MatchOnly.
  • Запустите программу.

Обратите внимание, что пункты меню «Файл» — это A и B.

Нажмите File -> A, чтобы создать дочернее окно.

Обратите внимание, что меню «Файл» в контейнере теперь содержит A, B и C.

Обратите также внимание на то, что меню «Файл» в дочернем элементе есть, но в нем нет пунктов. Это потому, что C был объединен.

Теперь вы можете установить для свойства MenuStrip.Visible дочернего элемента значение False, чтобы дочерний элемент не отображал меню. Это удобно оставить как True при разработке меню, чтобы вы могли убедиться, что все элементы дочернего меню были правильно объединены (они исчезнут из дочернего меню).

Вы можете использовать свойство MergeIndex, чтобы управлять тем, как дочерние элементы объединяются в контейнер.

person Tergiver    schedule 18.08.2010
comment
Я попробовал эти точные шаги (следовал письму) в Visual Studio 2013, и они не сработали. Я вижу 2 файловых меню, одно в контейнере MDI и одно в дочернем MDI. - person BlueMonkMN; 10.04.2014
comment
Я пропустил часть, где вам также нужно установить для свойства visible элемента управления полосой меню в Form2 значение False, потому что это не было включено в список шагов, а скорее в абзаце в конце. - person BlueMonkMN; 10.04.2014
comment
Я обнаружил, что если вы добавите меню позже, вы можете попасть в состояние, когда вы не сможете заставить их объединиться. Я попробовал несколько обходных путей в моей существующей форме, но она так и не заработала. Когда я создал новую родительскую форму и сначала поместил меню и правильно объединил его, я, наконец, заработал. - person JohnOpincar; 03.02.2017