Выполнение:
Многодокументный интерфейс Windows (MDI) позволяет программам работать с множеством форм, расположенных в одной родительской форме. Применение MDI сделает интерфейс программы более аккуратным, поскольку находящиеся в нем формы не будут разбросаны по всему экрану.
Стандарт MDI позволяет совершенствовать программы в двух направлениях. Во-первых, Вы сможете ограничиться одной формой-контейнером, которая станет рабочим фоном приложения. Если пользователь переместит контейнер, вместе с ним переместятся и все дочерние формы, что сделает интерфейс программы организованным и самодостаточным. Во-вторых, что еще важнее, пользователь может одновременно работать с несколькими документами. MDI-приложения позволяют использовать несколько экземпляров одной и той же формы, что увеличивает производительность и гибкость ваших программ.
- Рассмотрим на примере, как работает MDI-интерфейс, усовершенствовав наш графический редактор.
- Загрузите в окно редактора проект приложения из занятия № 16 «Обработка событий мыши». Основной форме проекта дайте имя frmPicture. Она в дальнейшем будет выступать в роли макета дочерней формы.
- Добавьте в проект родительскую MDI-форму с помощью команды меню Project → Add Windows Form → MDI Parent Form (Проект → Добавить форму Windows → Родительская форма MDI). На панели свойств задайте ей имя mdiGeneral. Установите значение свойства Text родительской формы равным Графический редактор Художник 1.0.
- Теперь настроим дочернюю форму frmPicture. Установите значение свойства Text для нее равным Рисунок.
Каждое загруженное дочернее окно занимает некоторый объем оперативной памяти. Поэтому, если предполагается интенсивно использовать в программе несколько экземпляров дочерних окон, необходимо свести в них к минимуму объем программного кода и количество элементов управления. В противном случае, приложение может резко замедлить работу компьютера из-за нехватки оперативной памяти.
Родительская MDI-форма является контейнером, в котором располагаются все дочерние окна. Поэтому именно она ответственна за создание дочерних окон. Кроме того, в родительской форме обычно хранятся совместно используемые элементы интерфейса, например, такие как панель инструментов, строка состояния и т.д.
- Обратите внимание, что родительская форма имеет собственное меню. Перейдите на меню родительской формы и измените процедуру для пункта меню File → New (Файл → Создать), добавив вместо кода Windows.Forms.Form нашу форму frmPicture:
Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) Handles NewToolStripMenuItem.Click,NewToolStripButton.Click, NewWindowToolStripMenuItem.Click ' Создать новый экземпляр дочерней формы. Dim ChildForm As New frmPicture ' Сделать ее дочерней для данной формы MDI перед отображением. ChildForm.MdiParent = Me m_ChildFormNumber += 1 ChildForm.Text = "Рисунок " & m_ChildFormNumber ChildForm.Show() End Sub |
Давайте разберемся в приведенном листинге. Вначале, в операторе объявления Dim указано имя объектной переменной (переменной типа Object), в которой будет содержаться экземпляр формы; в объявлении Dim используется ключевое слово New. Затем формируется строка заголовка создаваемой формы (свойство .Text). После того, как создана объектная переменная для вывода формы на экран, используется метод Show() для отображения формы. Однако вместо имени формы ему задается имя объектной переменной.
- Установите в качестве формы для запуска родительскую MDI-форму (меню Проект → Свойства: WindowsApplication…) и запустите проект. При выборе меню File → New (Файл → Создать) запускается дочерняя форма, но меню на форме не активно.
- Перейдите на форму frmPicture и перенесите полностью меню с дочерней формы на родительскую форму (вырезав элемент меню из дизайна дочерней формы и вставив на родительскую). Точно также вырежьте из кода программы тот фрагмент кода дочерней формы, который относится к пунктам меню, и вставьте его в код родительской формы. В результате на дочерней форме не должно остаться ни одного элемента управления.
- Добавьте в проект стандартный модуль и из кода дочерней формы вставьте туда описание переменных, изменив Private на Public:
Public КнопкаНажата As Boolean Public ИнструментКвадрат As Boolean Public ИнструментЛиния As Boolean |
- Запустите проект . Сначала выберие меню File → New (Файл → Создать), а затем Инструмент. Нарисуйте что-нибудь на форме. А затем еще раз выберите меню File → New (Файл → Создать) – появился новый экземпляр формы!
- Скорее всего, Вы обратили внимание на два неудобства. Первое: при запуске новой формы никакой инструмент не активен. Добавьте в обработку процедуры пункта меню New (Создать) (ShowNewForm) следующий фрагмент:
ИнструментКвадрат = True |
- Кроме того, если Вы хотите, чтобы при запуске программы появлялось окно для нового рисунка, то добавьте в модуль родительской формы следующий код:
Private Sub MDIGeneral_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ShowNewForm(sender, e) End Sub |
- Сразу же можете поменять меню с англоязычного на русский язык, изменив подписи меню в дизайне формы.
- Добавим код в обработку события меню Open (Открыть). Открывать будем файл-изображение (расширение bmp), загружая его в качестве фона активной дочерней формы: