Работа с многодокументными (MDI) формами

Другая разновидность форм — многодокументные, или MDI-формы. Интерфейс MDI позволяет открыть сразу несколько окон внутри родительского окна-контейнера. Скажем, в главном окне типичного текстового редактора (классический пример — Word for Windows) можно открыть несколько документов (рис. 2.7). Главное окно выполняет функции контейнера, а дочерние формы находятся внутри него. MDI-приложения появились в те времена, когда на рынке преобладали ранние версии Windows. Многодокументные приложения позволяли одновременно открывать несколько файлов, не запуская нескольких копий одной программы. Это экономило не только время, но и память.

 

Рис. 2.7. Несколько документов в родительском окне-контейнере

 

Интерфейс MDI обычно используется для документно-ориентированных приложений (например, текстовых или графических редакторов). Программа называется документно-ориентированной, если она предназначена для работы с документами. Если пользователи приложения должны одновременно работать с несколькими формами, выбирайте модель MDI. Visual Basic позволяет очень просто создавать MDI-приложения.

 

Создание MDI-приложения

Для создания MDI-приложения необходимо иметь как минимум две формы — родительскую (контейнер) и дочернюю (внутреннюю). Чтобы работать с дочерними формами различных типов, необходимо включить в проект дополнительные формы. Тем не менее для простейшего MDI-проекта одной формы вполне достаточно. Проект создается так:

1. Создайте новый проект командой File >• New Project. Если у вас включен Project Wizard, выберите тип проекта Standard EXE.

2. В созданном проекте изначально присутствует одна форма. Задайте ее свойству Name значение frmChild, а свойству Caption — Дочерняя форма MDI.

3. Чтобы создать родительскую форму MDI, щелкните правой кнопкой мыши на папке Forms в окне проекта и выполните команду Add > MDI Form. Когда на экране появится окно Form Wizard, выберите в нем MDI Form.

4. Задайте свойству Name значение frmMDI, а свойству Caption — значение Родительская форма MDI

5. Щелкните правой кнопкой мыши на строке Project1 в окне проекта и выберите из контекстного меню команду Project1 Properties. Выберите из списка Startup Object строку frmMDI. Если не сделать этого, в начале работы вашего приложения будет отображаться дочерняя форма.

6. Выберите в окне проекта строку frmChild. Задайте свойству MDI Child значение True - теперь дочерняя форма будет находиться внутри родительской.

7. Выберите в окне проекта строку frmMDI.

8. Запустите редактор меню командой Tools > Menu Editor. Появляется окно, изображенное на рис. 2.8.

 

Рис. 2.8. Редактор меню

 

В своем примере мы ограничимся очень простым меню. Не беспокойтесь о технических подробностях работы с редактором меню - они будут рассмотрены в уроке 5, «Создание и использование меню и панелей инструментов».

1. Введите &File в поле Caption.

2. Введите mnuFile в поле Name.

3. Нажмите кнопку Next.

4. Нажмите кнопку со стрелкой вправо — у команды меню появляется отступ.

5. Введите &New Form в поле Name.

6. Введите mnuFileNew в поле Name.

7. Закройте редактор меню кнопкой ОК.

8. В форме frmMDI должно появиться меню File. Выполните команду File > New, и на экране появится окно программы.

9. Вставьте в процедуру события mnuFileNew_Click() следующий фрагмент:

 

Dim frm As New frmChild

frm.Show

 

10. Сохраните и запустите проект. На рисунке показан примерный вид окна MDI-ириложения.

Добавленный нами фрагмент создает новую копию формы frmChild и отображает ее. Это происходит при каждом выполнении команды File > New. Попробуйте открыть и закрыть несколько дочерних окон; как видите, мы построили вполне рабочее MDI-приложение.

 

Новая версия MDI-приложения

Чтобы наша программа действительно была похожа на коммерческие MDI-приложения Windows, необходимо добавить несколько дополнительных штрихов. Например, все дочерние формы имеют одинаковые названия, так что их невоз-

можно отличить друг от друга; этот недостаток нужно исправить. Также хотелось бы иметь возможность упорядочить дочерние окна и выстроить их «мозаикой», или «каскадом». Наконец, в меню должен присутствовать список окон, при помощи которого можно легко перейти к любому дочернему окну, даже если оно спрятано под другими окнами.

1. Запустите редактор меню и добавьте в строку меню родительского окна, frmMDI, новое меню &Window. Установите флажок WindowList в редакторе меню.

2 Добавьте в новое меню команды Tile и Cascade. Назовите их mnuWindowTile и mnuWindowCascade соответственно.

3. Закройте редактор меню кнопкой ОК.

4. Добавьте в процедуру события Click объекта mnuWindowTile следующую строку:

frmMDI.Arrange vbTileHorizontal

 

5. Добавьте в процедуру события Click объекта mnuWindowCascade следующую строку:

frmMDI.Arrange vbCascade

 

vbCascade и vbTileHorizontal — встроенные константы Visual Basic. Их значение описано в справочной системе.

6. Измените код процедуры для команды mnuFileNew:

 

Private Sub mnuFileNew_Click()

Static Counter As Integer

Dim frm As New frmChild

Counter = Counter + 1

frm.Caption = "Дочерняя форма MDI" & Counter

frm.Show

End Sub

 

7. Сохраните и запустите приложение. Обратите внимание на отличия рис. 2.9 от предыдущего рисунка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: