Практическое руководство. Создание дочерних форм MDI

Дочерние формы MDI являются основным элементом приложений с интерфейсом MDI, так как они находятся в центре взаимодействия с пользователями.

С помощью описанной ниже процедуры в Visual Studio можно создавать дочерние формы MDI, отображающие элемент управления RichTextBox аналогично большинству текстовых редакторов. Замена элемента управления System.Windows.Forms на другие элементы управления, такие как DataGridView, или на сочетание элементов управления позволяет создавать дочерние окна MDI (и, следовательно, приложения MDI) с разнообразными возможностями.

Создание дочерних форм MDI

  1. В Visual Studio создайте новый проект приложения Windows Forms. В окне Свойства формы присвойте свойству IsMdiContainer значение true, а свойству WindowsState — значение Maximized.

    При этом форма назначается в качестве MDI-контейнера для дочерних окон.

  2. Из Toolbox перетащите элемент управления MenuStrip в форму. Присвойте свойству Text значение File.

  3. Щелкните многоточие (...) рядом со свойством Items и нажмите кнопку "Добавить ", чтобы добавить два дочерних элемента меню полосы инструментов. Присвойте свойству Text этих элементов значения Создать и Окно.

  4. В обозревателе решений щелкните правой кнопкой мыши проект, а затем выберите Добавить>Новый элемент.

  5. В диалоговом окне Добавление нового элемента на панели Шаблоны выберите Форма Windows Forms (в Visual Basic или Visual C#) или Приложение Windows Forms (.NET) (в Visual C++). В поле Имя введите имя формы Form2. Нажмите кнопку Открыть, чтобы добавить форму в проект.

    Примечание.

    Дочерняя форма MDI, созданная на этом этапе, является стандартной формой Windows Forms. Таким образом, у нее есть свойство Opacity, которое позволяет управлять прозрачностью формы. Однако свойство Opacity предназначено для окон верхнего уровня. Его не следует использовать в дочерних формах MDI, иначе могут возникнуть проблемы с рисованием.

    Эта форма будет шаблоном для дочерних форм MDI.

    Откроется конструктор Windows Forms с формой Form2.

  6. Из панели элементов перетащите на форму элемент управления RichTextBox.

  7. В окне Свойства задайте для свойства Anchor значение Top, Left, а для свойства Dock — значение Fill.

    В результате элемент управления RichTextBox будет целиком заполнять область дочерней формы MDI, даже если ее размеры изменятся.

  8. Дважды щелкните пункт меню Создать, чтобы создать для него обработчик событий Click.

  9. Вставьте код, аналогичный приведенному ниже, чтобы при выборе пользователем пункта меню Создать создавалась дочерняя форма MDI.

    Примечание.

    В примере ниже обработчик событий обрабатывает событие Click для MenuItem2. Имейте в виду, что в зависимости от особенностей архитектуры приложения пункт меню Создать может не являться MenuItem2.

    Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
       Dim NewMDIChild As New Form2()
       'Set the Parent Form of the Child window.
       NewMDIChild.MdiParent = Me
       'Display the new form.
       NewMDIChild.Show()
    End Sub
    
    protected void MDIChildNew_Click(object sender, System.EventArgs e){
       Form2 newMDIChild = new Form2();
       // Set the Parent Form of the Child window.
       newMDIChild.MdiParent = this;
       // Display the new form.
       newMDIChild.Show();
    }
    
    private:
       void menuItem2_Click(System::Object ^ sender,
          System::EventArgs ^ e)
       {
          Form2^ newMDIChild = gcnew Form2();
          // Set the Parent Form of the Child window.
          newMDIChild->MdiParent = this;
          // Display the new form.
          newMDIChild->Show();
       }
    

    При использовании C++ добавьте следующую директиву #include в начало формы Form1.h:

    #include "Form2.h"
    
  10. В раскрывающемся списке в верхней части окна Свойства выберите пункт меню, соответствующий пункту Файл, и задайте для свойства MdiWindowListItem окну ToolStripMenuItem.

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

  11. Нажмите клавишу F5 для запуска приложения. Выбирая команду Создать в меню Файл, можно создавать дочерние формы MDI, которые будут отслеживаться в меню Окно.

    Примечание.

    Когда в дочерней форме MDI есть компонент MainMenu (обычно обладающий структурой пунктов меню) и он открыт внутри родительской формы MDI, также имеющей компонент MainMenu (обычно обладающий структурой пунктов меню), пункты меню будут объединены автоматически, если задано свойство MergeType (и, возможно, свойство MergeOrder). Установите для свойства MergeType обоих компонентов MainMenu и всех пунктов меню дочерней формы значение MergeItems. Кроме того, установите свойство MergeOrder таким образом, чтобы пункты обоих меню приводились в нужном порядке. Необходимо помнить, что при закрытии родительской формы MDI каждая из дочерних форм MDI создает событие Closing до создания события Closing для родительской формы MDI. Отмена события Closing дочерней формы MDI не отменяет событие Closing родительской формы MDI. Однако для аргумента CancelEventArgs для события Closing родительской формы MDI будет установлено значение true. Чтобы принудительно закрыть родительскую и все дочерние формы MDI, задайте для аргумента CancelEventArgs значение false.

См. также