MDI-інтерфейс

Приклад MDI-інтерфейсу наведено на рис.1. Головна і суттєва відмінність MDI в тому, що для цього типу інтерфейсу можна відкривати багаторазово форму одного виду документа для декількох різних за змістом документів. Прикладом MDI-інтерфейсу може служити програма Microsoft Excel.

Рис.1. Приклад MDI-інтерфейсу

Для такого інтерфейсу характерно те, що є головне вікно (MDI-вікно), що зазвичай називають батьківським вікном (на рис. 1 це вікно з заголовком Microsoft Excel) і необхідну для роботи кількість підлеглих (вкладених) вікон, які називаються дочірніми (на рис. 1 це вікна з заголовками Книга1-1, Книга1-2, Книга1-3). Дочірніх вікон може бути відкрито будь-яку кількість, обмежується вона тільки можливостями комп'ютера.

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

Батьківське вікно MDI-інтерфейсу

Батьківське вікно MDI-інтерфейсу є контейнером для всіх дочірніх вікон. При його мінімізації разом з ним мінімізуються і всі дочірні вікна. У разі, коли хоча б одне дочірнє вікно не вміщається в видиму частину батьківського, в головному вікні відображається смуга прокрутки.

Для створення батьківського вікна MDI-інтерфейсу необхідно присвоїти значення True властивості IsMdiContainer стандартної форми Windows. При заданні даного значення фон форми потемніє і прийме показаний на рис. 2 вигляд.

Рис.2. Форма батьківського вікна інтерфейсу типу MDI

 Дочірнє вікно MDI-інтерфейсу

Дочірні вікна можуть знаходитися тільки всередині батьківського (рис. 3.), тобто вони не можуть бути винесені або переміщені за його межі. При розгортанні, дочірні вікна займають весь простір батьківського вікна, до його заголовку додається заголовок активного дочірнього вікна в квадратних дужках. При згортанні дочірнього вікна його піктограма відображається внизу батьківського вікна.

Рис. 3. Батьківське і дочірнє вікно

Для створення дочірнього вікна MDI-інтерфейсу необхідно створити копію стандартної форми Windows під час виконання програми та перед її відображенням присвоїти ім'я батьківського вікна її властивості MdiParent. Після задання імені батьківського вікна властивість IsMdiChild дочірнього вікна автоматично приймає значення True.

Розташуванням дочірніх вікон у батьківському вікні можна керувати за допомогою методу LayoutMdi, параметр якого може приймати одного із значень перерахування MdiLayout (таблиця 1).

Таблиця 1. Варіанти розташування дочірніх вікон у батьківському вікні

 Значення Опис 
 ArrangeIcons Каскадне розташування дочірніх форм, при цьому кожна наступна зрушена вниз і вправо приблизно на ширину заголовка форми. Дочірні форми можуть не цілком розташовуватися усередині видимої області батьківської форми. Дане значення задається за замовчуванням
 Cascade  Каскадне розташування дочірніх форм, при цьому кожна наступна зрушена вниз і вправо приблизно на ширину заголовка форми. Всі дочірні форми цілком розташовуються у видимій області батьківської форми
 TileHorizontal  Розташування у вигляді горизонтальної мозаїки, при цьому дочірні форми мають ширину батьківської форми і таку висоту, щоб розміститися по всій висоті батьківського вікна
 TileVertical  Розташування у вигляді вертикальної мозаїки, при цьому дочірні форми мають висоту батьківської форми і таку ширину, щоб розміститися по всій ширині батьківського вікна

Для каскадного розташування дочірніх вікон в код батьківського вікна при створенні нової дочірньої форми необхідно додати наступний рядок:

        Me.LayoutMdi(MdiLayout.Cascade)

Приклад MDI-інтерфейсу

Розглянемо невеликий приклад, що дозволяє під час запуску програми на екрані відображати батьківське і одне дочірнє вікно (див. Рис. 3.). Для цього виконайте такі дії:

1. Створіть новий Windows-додаток з ім'ям MdiExample.

2. Відкрийте вікно властивостей і задайте за допомогою властивостей Text і Name форми заголовок форми Батьківське вікно і ім'я форми frmParentMdi.

3. Щоб вікно було батьківським, надайте властивості IsMdiContainer форми значення True.

4. Додайте в проект ще одну форму за допомогою діалогового вікна Add New Item (Додати новий елемент), що відкривається однойменною командою меню Project (Проект).

5. Далі відкрийте вікно властивостей нової форми і, скориставшись властивостями Text і Name, задайте заголовок форми Дочірнє вікно і її ім'я frmChildMdi.

6. Запрограмуємо виклик дочірньої форми при відкритті батьківського вікна. Для цього виділіть батьківську форму в конструкторі форм і за допомогою команди View Code (Відкрити код) контекстного меню викличте редактор коду батьківського вікна.

7. Додайте в код наступну процедуру:

    Private Sub NewChildForm()

        Dim f As New frmChildMdi

        f.MdiParent = Me

        f.Show()

    End Sub

Спочатку створюється екземпляр класу форми frmChildMdi. Потім властивості MdiParent цього примірника присвоюємо значення Me (тобто вказуємо на батьківську форму), тим самим перетворюємо форму в дочірнє вікно. Далі відкриваємо дочірнє вікно.

8. Щоб дочірнє вікно відкривалося при запуску батьківського, додайте в конструктор або метод Load батьківського вікна рядок:

        NewChildForm()

В результаті весь код проекту матиме вигляд:

Public Class frmParentMdi

    Private Sub NewChildForm()

        Dim f As New frmChildMdi

        f.MdiParent = Me

        f.Show()

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) _

                           Handles MyBase.Load

        NewChildForm()

    End Sub

End Class

Додаток готовий.