VB.NET - Programas com Interface MDI


Em uma interface MDI - Mutilple Document Interface - uma janela pode conter vários outros formulários e cada um com apenas um documento. Uma aplicação MDI consiste de uma formulário MDI pai e múltiplos formulários filhos ; os formulários filhos estão contidos no interior do formulário pai.

O próprio VB.NET é um exemplo de aplicação com interface MDI ou um aplicativo MDI, pois você pode ter vários documentos abertos ao mesmo tempo sendo que cada um deles é exibido em sua própria janela dentro da janela-pai do VB.NET.

A única diferença em criar um aplicativo MDI e um aplicativo Windows comum é o container da MDI. Este container ou formulário-pai é o formulário da aplicação que contém os formulários-filhos. Embora todos os formulários possam ser formulários-filho isto não é obrigatório. Você pode querer que alguns formulários não sejam filhos do formulário pai.

Para criar um formulário pai basta configurar a propriedade IsMdiContainer como True. Isto faz com que um novo controle MdiClient seja incluído no formulário e será o container dos formulários filhos.

No VB6.0 uma aplicação MDI era criada pela inclusão de um formulário MDI em um projeto e a seguir pela definição da propriedade MDIChild dos demais formulários. No VB.NET qualquer formulário pode ser um formulário MDI pela definição da propriedade IsMdiContainer como True.

No VB.NET a propriedade MdiParent substitui a propriedade MDIChild , e , é utilizada para identificar o formulário MDI que irá conter formulário-filho

No VB6 a propriedade AutoShowChildren de um formulário MDI era usada para exibir automaticamente um formulário filho quando ele fosse carregado. No VB.NET esta propriedade não existe mais .

No VB6 você não podia ter controles como : botões de comando ,label, textBox, etc. no formulário MDI pai. Somente controles como Menu , status bar e outros formulários podiam ser incluídos. No VB.NET qualquer controle pode ser incluído em um formulário MDI pai ou MDIForm.

Outra diferença básica é que no VB6 você só podia ter um único formulário MDI e no VB.NET podemos ter mais de um formulário MDI. Além disto no VB6.0 uma aplicação MDI que também contivesse um formulário que não fosse um formulário-filho MDI não poderia ser encerrada até que o formulário fosse fechado , mesmo se um formulário-pai MDI estivesse fechado. No VB.NET , a aplicação será encerrada quando o formulário de partida for fechado sem considerar qualquer formulário não MDI na aplicação.

Na tabela abaixo temos uma lista das propriedades e métodos no VB6 e seus equivalentes no VB.NET:

MDIForm Propriedades e métodos

Visual Basic 6.0 Equivalentes Visual Basic .NET
propriedade ActiveForm ActiveMdiCHild
método Arrange

0 - vbCascade

1 – vbTileHorizontal

2 – vbTileVertical

3 – vbArrangeIcons

LayoutMdi

0 - MdiLayout.Cascade

1 - MdiLayout.TileHorizontal

2 - MdiLayout.TileVertical

3 - MdiLayout.ArrangeIcons

propriedade AutoShowChildren

Sem  equivalente

Vamos criar uma aplicação MDI simples para que você possa praticar. Esta aplicação exemplo será um simples visualizador de imagens que usa a interface MDI.

- Inicie um novo projeto no Visual Studio.NET com as seguintes características (sinta-se a vontade para alterar a seu gosto.)

  1. Project Types : Visual Basic .NET
  2. Templates : Windows Application
  3. Name : VerImagemMDI
  4. Location : c:\vbnet\VerImagemMDI

Altere as propriedades do formulário padrão form1.vb conforme abaixo:

Propriedade Valor
Name frmMDI
Text Visualizador de Imagens
IsMdiContainer True

 

A seguir inclua um componente MainMenu,  alterando seu nome para mnuMDI , no formulário e crie um menu de opções conforme as figuras abaixo:

 

Nota: para cada opção do menu utilizei nomes relacionados com as ações pertinentes: mnuArquivo , mnuAbrir, mnuSair , mnuJanela , mnullHorizontal, mnullVertical e mnuCascata

 

   

 

Inclua também um componente OpenFileDialog no formulário-pai MDI e configure suas propriedades conforme abaixo:

 

Propriedade Valor
Name DlgAbrir
filter Graphic Files| *.gif;*.bmp;*.jpg|All files|*.*

 

O menu será usado para abrir arquivos de imagens e sair da aplicação; O componente OpenFileDialog será responsável por abrir a janela de diálogo - Abrir Arquivo.

 

 

Agora vamos incluir o código em cada opção do menu.

 

Na opção Abrir do menu Arquivo , insira o código abaixo:

 

Private Sub mnuAbrir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuAbrir.Click

 

If dlgAbrir.ShowDialog() = DialogResult.OK Then
 

   Dim oformulario As New frmImagem()

   oformulario.MdiParent = Me

   oformulario.picture = Image.FromFile(dlgAbrir.FileName)

   oformulario.Show()

 

End If

End Sub

 

Na opção Sair do menu Arquivo , insira o código a seguir:

 

Private Sub mnuSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuSair.Click

Me.Close()

End Sub

 

Nas opções do menu Janela insira o código correspondente conforme abaixo:

 

  Private Sub mnullHorizontal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnullHorizontal.Click
        Me.LayoutMdi(MdiLayout.TileHorizontal)
    End Sub

    Private Sub mnullVertical_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnullVertical.Click
        Me.LayoutMdi(MdiLayout.TileVertical)
    End Sub

    Private Sub mnuCascata_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuCascata.Click
        Me.LayoutMdi(MdiLayout.Cascade)
    End Sub

 

Agora temos que criar o formulário que irá exibir as imagens. Inclua um novo formulário no seu projeto no menu Project e Add Windows Form. Quando for solicitado o nome informe : frmImagen.vb .

 

Altere sua propriedade Text para Visualiza Imagem e inclua no formulário um controle PictureBox , com o nome de picImagem , onde iremos exibir as imagens. Altere também a propriedade Dock do picturebox para Fill.

 

Agora digite o código abaixo na formulário frmImagem:

 

Public Property picture() As Image

   Get

        Return picImagem.Image

   End Get

   Set(ByVal Value As Image)

        picImagem.Image = Value

   End Set

End Property

 

Neste código eu defini uma propriedade chamada picture()  para o meu controle PictureBox. Ela é usada para acessar a propriedade Image do controle picImagem. (Se você tivesse tornado o controle público poderia acessar a propriedade também , mas eu encapsulei a propriedade de forma que ela somente pode acessada pelo método picture.)

 

Para encerrar temos que incluir o código que irá carregar o formulário-filho - frmImagen . No evento Load do formulário-pai - frmMDi , digite o código a seguir :

 

Private Sub frmMDI_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


Dim frmchild As New frmImagen()

frmchild.MdiParent = Me

frmchild.Show()


End
Sub

 

Execute a aplicação e faça alguns testes. O resultado poderá ser algo como mostrado na figura abaixo:

 

 

Até o próximo artigo...

 

Referências:


José Carlos Macoratti