Cамоучитель по VB.NET

Формы MDI


В прежних версиях VB при программировании приложений с интерфейсом MDI (Multiple Document Interface) родительская форма MDI выбиралась на стадии конструирования. В .NET эта задача решается иначе — свойству IsMdiContainer формы задается значение True. Программист создает дочерние формы MDI на стадии конструирования или выполнения, а затем заносит в их свойство Mdi Parent ссылку на форму со свойством I sMdi Conta i пег, равным True. Таким образом, в программах VB .NET можно сделать то, что было практически нереально в предыдущих версиях VB, — изменять связи MDI во время работы программы. Кроме того, приложение может содержать несколько родительских форм MDI; в VB6 такая возможность не поддерживалась.

Рассмотрим пример. Создайте приложение со следующей процедурой Forml_Load:

Private Sub Forml_Load(ByVal sender As System.Object._

ByVal e As System.EventArgs) Handles MyBase.Load

Me.Text = "I'm an MDI Parent"

Me.IsMdiContainer - True

Dim MyChild As New System.Windows.Forms.Form()

MyChiId.MdiParent = Me

MyChild.Show()

MyChild.Text ="MDI Child" End Sub

Примерный вид окна показан на Рисунок 8.12.

Конечно, это весьма жалкое подобие приложения MDI. В приложениях MDI обычно присутствует меню Window, позволяющее расположить открытые дочерние окна «черепицей» или «мозаикой», а также активизировать любое дочернее окно. Меню Window реализуется в родительском окне, причем его код может быть достаточно простым:

Public Sub InitializeMenu()

Dim mnuWindow As New MenuItem("&Window")

MainMenu1.MenuIterns.Add(mnuWindow)

mnuWindow.MenuItems.AddCNew Menultem _

("&Cascade", AddressOf WindowCascade_Clicked))

mnuWindow.MenuItems.Add(New Menultem

("Tile &Horizontal", AddressOf WindowTileHoriz_C1icked))

mnuWindow.MenuItems.Add(New Menultem _

("Tile &Vertical". AddressOf WindowTileVert_Clicked))

mnuWindow.MdiList = True

End Sub

Protected Sub WindowCascade_Clicked(ByVal

Sender As Object. ByValeAs System.EventArgs)

Me.LayoutMdi(MdiLayout.Cascade)

End Sub

Protected Sub WindowTileHoriz_Clicked(ByVal Sender As Object._

ByVal e As System.EventArgs)

Me.LayoutMdi(MdiLayout.TileHorizonta1)

End Sub

Protected Sub WindowTileVert_Clicked(ByVal Sender As Object,

ByVal e As System.EventArgs)

Me.LayoutMdi(MdiLayout.TileVertica1)

End Sub

Примерный вид окна, полученного при вызове InitializeMenu для формы из предыдущего примера, показан на Рисунок 8.13.



Содержание раздела