Поделиться через


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

Обновлен: Ноябрь 2007

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

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

7aw8zc76.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих настроек или версии среды. Чтобы изменить настройки, в менюСервис выберите команду Импорт и экспорт параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

Чтобы создать дочерние MDI-формы, выполните следующие действия.

  1. Создайте родительскую MDI-форму, структура меню которой содержит пункты меню верхнего уровня Файл и Окно и пункты меню Создать и Закрыть. Дополнительные сведения о создании родительских MDI-форм см. в разделе Практическое руководство. Создание родительских MDI-форм.

  2. Из раскрывающегося списка в верхней части окна Свойства выберите пункт меню, соответствующий пункту меню &Окно, и задайте свойству MdiList значение true.

    Это позволит меню Окно поддерживать список открытых дочерних MDI-окон с галочкой рядом с активным дочерним окном.

  3. В Обозревателе решений щелкните правой кнопкой мыши проект, выберите команду Добавить, затем Добавить новый элемент.

    Эта форма будет шаблоном для создаваемой дочерней MDI-формы.

    7aw8zc76.alert_note(ru-ru,VS.90).gifПримечание.

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

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

    Откроется конструктор Windows Forms, отображающий форму Form2.

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

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

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

  7. Создайте обработчик событий Click для элемента меню Создать. Сведения о создании обработчиков событий см. в разделе Руководство: создание обработчика событий с помощью конструктора.

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

    7aw8zc76.alert_note(ru-ru,VS.90).gifПримечание.

    В следующем примере обработчик событий обрабатывает событие 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();
       }
    

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

    #include "Form2.h"
    
  9. Нажмите клавишу F5 для запуска приложения. Обратите внимание, что при выборе команды Создать в меню Файл можно создавать новые дочерние MDI-формы, управление которыми осуществляется в меню Окно.

    7aw8zc76.alert_note(ru-ru,VS.90).gifПримечание.

    Следует помнить, что когда в дочерней 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.

См. также

Задачи

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

Практическое руководство. Определение активной дочерней MDI-формы

Практическое руководство. Отправка данных в активную дочернюю MDI-форму

Практическое руководство. Упорядочение дочерних форм интерфейса MDI

Другие ресурсы

Приложения с интерфейсом MDI