Cadastre-se Revistas DevMedia Cursos
 

Space de THIAGO MARTINS COELHO.
Busca Autor


Últimas 20 atualizações de THIAGO MARTINS COELHO.

Artigo - Como utilizar interface MDI em aplicações .NET Windows Forms

1. Introdução

Tenho visto nos fóruns muita gente perguntando como fazer para abrir Forms dentro de um Form principal em aplicações Windows Forms, para isso é necessário entender o que é MDI e suas utilidades.

MDI significa “Multiple Document Interface”, o conceito dessa interface é abrir várias janelas dentro de uma janela principal, ou seja, adicionar diversas “janelas filhas” dentro de uma “janela pai”, exemplos dessa interface são os conhecidos Microsoft Word, Excel, etc..

Uma interface diferente seria o SDI, que significa “Single Document Interface”, nesse caso cada Form aberto representa uma janela diferente na aplicação, um exemplo é o Internet Explorer.

Neste artigo, vamos criar um projeto em C# que engloba os principais conceitos da interface MDI, para quem prefere VB.NET não se preocupe, no final do artigo está disponível o sample também em VB.NET.

2. Crie a Interface

Crie um novo projeto do tipo Windows Forms e chame de ProjetoMDI, adicione 4 novos Forms com os seguintes nomes: FormPrincipal, FormFilho1, FormFilho2 e FormFilho3.

Para o FormPrincipal, vá até a janela de propriedades e defina a propriedade WindowState como Maximized para que a janela abra em tela cheia.

Crie um MenuStrip no FormPrincipal  e chame-o de mnuPrincipal e crie a seguinte estrutura de itens de menu (MenuItems):

Estrutura do menu principal

Figura 1: Estrutura do menu principal

3. Mão no Código!

Clique duas vezes no mnuAbrirFilho1 e adicione o seguinte código:

Listagem 1: Abrindo um form da forma comum

private void mnuAbrirFilho1_Click(object sender, EventArgs e)
{
    FormFilho1 form = new FormFilho1();
    form.Show();
}

Compile e execute a aplicação, clique no menu “Abrir Filho 1″ e repare que o FormFilho1 foi aberto em outra janela (interface SDI), veja que ao minimizar a janela aberta esta, fica na barra do menu iniciar.

Como fazer para abrir dentro da janela principal? Serão dois passos simples. Primeiro precisamos dizer que o FormPrincipal é um MdiContainer, ou seja, ele pode ter Forms filhos dentro dele, para isso configure a propriedade IsMdiContainer como true no FormPrincipal. Feito isso, precisamos fazer uma alteração no nosso código onde abrimos o FormFilho1 dizendo quem será o “pai” dele, ou seja, dentro de qual janela ele abrirá, fazemos isso pela propriedade MdiParentde FormFilho1:

Listagem 2: Abrindo um form dentro do form principal

private void mnuAbrirFilho1_Click(object sender, EventArgs e)
{
    FormFilho1 form = new FormFilho1();
    form.MdiParent = this;
    form.Show();
}

Se você não sabe o que significa esse “this”, nada mais é que a instância do Form no qual você está trabalhando, dessa forma, falamos que o “pai” de FormFilho1 é o Form atual “this” que é o FormPrincipal (No VB.NET o “this” é o mesmo que “Me”).

Agora adicione os códigos para abrir os outros Forms:

Listagem 3: Abrindo os demais forms no formato MDI

private void mnuAbrirFilho2_Click(obje
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
14/09/2012 14:08:00





Artigo - Comunicação entre Forms em .NET

Não existem apenas uma maneira para trocar dados entre Forms, mas no artigo serão abordadas três formas que considero úteis para a maioria dos casos: por construtor, pela referência de um Form aberto ou por EventHandler, mas primeiro vamos criar o visual da nossa aplicação.Crie um novo projeto do tipo Windows Forms (C#) e adicione dois novos Forms, os nomes podem ficar como Form1 eForm2.No Form1 adicione os seguintes controles:

  • label1: Label
  • textBox1: TextBox
  • btnAbrirForm2: Button

Form1

Figura 1: Form 1

No Form2 adicione os seguintes controles:

  • textBox1: TextBox
  • textBox2: TextBox
  • textBox3: TextBox (Deixe o BackGround de outra cor, aqui coloquei verde)
  • lstProdutos: ListBox
  • btnEventHandler: Button
  • btnOpenForms: Button

Form2

1 Form 2

Pronto! O visual da aplicação já está criado, agora vamos ao que interessa, a comunicação entre as duas janelas.

1. Por construtor:

A comunicação via construtor é a que eu julgo mais fácil, mas vai ser útil apenas quando a janela que você deseja passar os dados ainda não estiver aberta ou instanciada.Adicione o seguinte código no Form2:

Listagem 1: Constructor do Form2

public Form2(List lista)
{
    InitializeComponent();
    foreach (string produto in lista)
    {
        lstProdutos.Items.Add(produto);
    }
}

Neste código, estamos criando um novo construtor para o Form2, sendo obrigatória a passagem de uma lista de strings por parâmetro (que virá do Form1) e no nosso caso serão produtos, com essa lista vamos atualizar o lstProduto adicionando cada string contida na lista.No Form1, adicione o seguinte código para o evento click do botão "Abrir Form2":

Listagem 2: Evento Click do botão btnAbrirForm2

private void btnAbrirForm2_Click(object sender, EventArgs e)
{
    List listaProdutos = new List();
    listaProdutos.Add("Mouse");
    listaProdutos.Add("Notebook");
    listaProdutos.Add("Teclado");
    Form2 form2 = new Form2(listaProdutos);
    form2.Show();
}

Nesse código criamos uma lista de produtos de uma loja de informática e passamos por parâmetro para o Form2. Compile e execute a aplicação. Clique no botão "Abrir Form2".

Form 2 com lista de produtos carregada

Figura 3: Form 2 com lista de produtos carregada

Como você pode ver, o Form2 já veio com uma lista de produtos carregada, enviada pelo Form1, mas a comunicação ficará a seu critério, você pode passar quantos objetos você desejar e da maneira que precisar.

2. Pela referência de um Form aberto:

Esse tipo de comunicação é utilizada quando se deseja manipular um Form que já está aberto na aplicação, obtendo sua referência pela classe Application.No Form2, adicione o seguinte código para o evento click do botão "OpenForms":

Listagem 3: Evento Click do botão btnOpenForms

private void btnOpenForms_Click(object sender, EventArgs e)
{
    //verifica se o Form1 está aberto
    if (Application.OpenForms.OfType().Count() > 0)
    {
        Form form1 = Application.OpenForms["Form1"];
        //seta as propriedades dos controles de
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
19/06/2012 00:00:00





 
Foto não disponivel

(Sem currículo cadastrado)
Arquivo de atualizações
 2012

Estatísticas do Autor:
Número de posts: 2
 
DevMedia Group - Tel: (21) 3382-5038 - www.devmedia.com.br
Todos os Direitos Reservados a DevMedia Group