Interface de Múltiplos documentos (MDI)

Vamos trabalhar com o formulários MDI e tratar algumas de suas características e propriedades usando a linguagem C#. A interface MDI ou Multiple Document Interface usada em aplicações Windows Forms é um conceito antigo e bem difundido. A interface MDI funciona como um container que pode conter diversos outros formulários. Um exemplo de aplicação muito conhecida que usa essa interface é o Microsoft Word.

A evolução em termos de complexidade das aplicações traduziu-se também no aumento do número de formulários necessários para o seu funcionamento, e no desenvolvimento do conceito de MDI – Multiple Document Interface. Trata-se de uma interface de programação Windows para criação de uma aplicação que permite aos usuários trabalharem com várias janelas ao mesmo tempo, com apenas um ícone na barra de tarefas. O formulário definido como MDI será o formulário “pai” da aplicação.



Para criar a aplicação segundo os requisitos enunciados devem ser executados os seguintes passos:
1. Criar uma aplicação Windows Application;
2. Adicionar dois formulários: Form1 e Form2.
3. Definir o Form1 como formulário principal; para efetuar esta operação é necessário nas propriedades do formulário colocar a propriedade IsMDIContainer com o valor True, e opcionalmente a propriedade WindowState com o valor Maximized, para assegurar que a aplicação será aberta em modo maximizado. 4. Adicionar ao Form1 o controle MenuStrip a partir da ToolBox (Figura 6).

Figura 6 – MDI Form com controlo menuStrip

Para abrir o Form2 como “filho” do Form1 é necessário codificar da seguinte forma:

A linha frmCli.MdiParent=this, indica que a instância do formulário criada é filho da instância do Form1 ativa, que é do tipo MDI.

Para exibir no menu os formulários filhos que estão abertos ?
Simples , selecione o controle MenuStrip e na janela de propriedades selecione a propriedade MdiWIndowListItem;
A seguir informe qual item do menu irá exibir os formulários filhos abertos:


O resultado é exibido a seguir:

Podemos alterar o arranjo dos formulários filhos da seguinte maneira:                                           






Cascade 
Tile Horizontal 
Tile Vertical 
Arranje Icons 












Para conseguir efetuar o arranjo via código fazermos assim: 

// Define o leiaute para cascade. this.LayoutMdi(MdiLayout.Cascade); 
// Define o leiaute para tile horizontal. this.LayoutMdi(MdiLayout.TileHorizontal); 
// Define o leiaute para tile vertical. this.LayoutMdi(MdiLayout.TileVertical); 
// Define o leiaute para arrange icons. this.LayoutMdi(MdiLayout.ArrangeIcons);


Como partilhar dados entre dois Forms? 

Em C# não existe o conceito de variáveis globais, como por exemplo em Visual Basic, onde podem ser utilizados os módulos. No entanto, isto pode ser um problema quando se pretende compartilhar dados entre formulários. Esta dificuldade pode ser ultrapassada pela criação de uma classe com a/as variáveis que se pretende utilizar como globais, declarando-as como estáticas (static). Exemplo Pretende-se criar uma aplicação que contém a classe Aluno, um formulário principal (“pai”) MDI, e dois formulários “filho” – frmClientes e frmClienteAltera.


Depois de alterados os dados do aluno no Form2, quando se regressa ao Form1, as caixas de texto apresentam os novos valores do objeto Cliente que foi criado e posteriormente alterado.

A classe Cliente, é composta por dois atributos: código e nome, estando implementados os métodos: construtor, set e get.




Para criar a variável “global”, que será um objeto do tipo Cliente, cria-se uma classe com uma variável a static:


No frmClientes quando o evento click no botão “Criar” é acionado, o valor da variável a da classe Transferencia será um novo objeto do tipo Cliente, sendo invocado o respectivo método construtor.



No frmClienteAltera quando o evento click do botão “Alterar” é acionado, os valores dos atributos do objeto são alterados, sendo invocados os métodos set da classe Cliente.



Comentários