Thiago Coelho
  • Início
  • Sobre
Follow

7Masters .NET

nov19
2012
3 Comentários Postado por Thiago Coelho

No dia 30 de Outubro de 2012 participei do evento 7Masters que é um encontro onde 7 especialistas de determinado tema apresentam situações inovadoras da sua área, o tema desse dia foi .NET e o encontro foi realizado na sede do iMasters.

Foi um imenso prazer participar desse encontro, pois o iMasters é um portal que traz conteúdo de qualidade para a comunidade técnica não apenas de .NET, mas de diversas linguagens e tecnologias, deixo aqui meu agradecimento ao Alê Borba pelo convite.

Falei sobre programação assíncrona com C# 5, confira os slides abaixo:

As palestras também foram gravadas em vídeo e podem ser vistas neste link.

Abraços e até logo!

Categorias .NET, Palestras - Marcações .net, 7Masters, async, await, C#, C# 5, eventos, iMasters, palestra, palestras, programação assíncrona, slides, slideshare

Windows 8 and Windows RT Product Guide

out25
2012
Deixe um Comentário Postado por Thiago Coelho

Windows 8 and Windows RT Product Guide

Saiu hoje o Windows 8 and Windows RT Product Guide, um guia geral que descreve os principais conceitos presentes no Windows 8 e Windows RT, você pode fazer o download através deste link. Bom proveito!

Categorias Windows 8 - Marcações guide, Microsoft, windows 8, windows rt, windows store, windows store apps, winrt

Princípios de design para Windows Store Apps

out09
2012
2 Comentários Postado por Thiago Coelho

Olá amigos, no artigo de hoje falarei dos princípios de design para Windows Store Apps, mas o que isso significa? Quando você escutar o termo “Windows Store Apps”, significa que são aplicativos que serão disponibilizados na Windows Store, ou seja, apps para o Windows 8 que será lançado no dia 26 de outubro e que rodará tanto em ambientes desktop ou tablets como o Microsoft Surface. Lembrando que o termo Windows Store Apps era chamado anteriormente de Metro Style Apps (entenda o caso).

Com esse novo conceito de design, somos praticamente obrigados a abandonar o conceito antigo de janelas Windows Forms, os tradicionais aplicativos que rodam em ambiente desktop com várias janelas, diversos botões, caixas de seleção e outros controles. O novo conceito diz que você deve se preocupar mais com o conteúdo, layout e até mesmo a tipografia, que juntos trazem uma boa experiência para o usuário.

Mas como fazer um design rico e que traga boa experiência para o usuário? Existem 5 princípios que se seguidos ajudarão você a fazer as melhores escolhas para o design da aplicação, fazendo dela uma ótima aplicação, hoje chamadas de great apps, os princípios são esses:

1. Show pride in craftsmanship

Se orgulhe de seu talento artístico! Você terá muitos usuários detalhistas, então dê atenção aos pequenos detalhes trazendo uma melhor experiência para eles, seguem as dicas:

  • Preocupe-se com detalhes.
  • O usuário deve se sentir seguro e confiável ao usar sua aplicação.
  • Mantenha um layout padrão, equilibrado e simétrico para trazer sensação de confiança por parte do usuário, mudanças drásticas podem afetar a confiabilidade de sua aplicação.
  • Prefira o layout em grid, é o layout clássico das Windows Store apps.
  • Faça a sua aplicação ser acessível ao maior público possível, incluindo pessoas com deficiências.

2. Be fast and fluid

Seja rápido! Deixe os usuários interagirem diretamente com o conteúdo ao invés de uma infinidade de controles, o entendimento do conteúdo deve ser fácil fazendo com que os usuários respondam com suas ações rapidamente, o fluxo da aplicação deve trazer uma experiência de continuidade como se fosse uma história em quadrinhos, seguem as dicas:

  • Seja receptivo à interação do usuário e pronto para a próxima interação.
  • Faça design para interações touch.
  • Alegre seus usuários com animações.
  • Crie uma interface imersiva, faça o usuário prender a imaginação na sua App.

3. Be authentically digital

Seja um digital autêntico! Remova os limites físicos, ultrapasse as barreiras, crie uma experiência mais simples do que a própria realidade, faça os usuários utilizarem o touch para virar uma página como se estivessem virando de verdade ou para rotacionar uma tampinha como se tivessem abrindo uma garrafa, aqui é o mundo real transposto para o mundo digital, seja criativo e ultrapasse os limites da sua imaginação, seguem as dicas:

  • Conecte na nuvem para que seus usuários possam estar conectados à outros.
  • Sua aplicação deve ser dinâmica e comunicativa.
  • Use uma tipografia bonita e de fácil compreensão e entendimento.
  • Use cores vibrantes, de destaque.
  • Use animações de forma significativa.

4. Do more with less

Faça muito com pouco! Não deixe o usuário se distrair com elementos que não são o foco da sua aplicação, sua interface deve conter apenas o necessário para que o usuário fique preso ao conteúdo, não permita distrações, seguem as dicas:

  • Defina o foco da sua aplicação, escolha um tópico e seja bom nele ao invés de englobar vários tópicos e ser medíocre em todos, cuidado com os “aplicativos fazem tudo”. Ex: Meu aplicativo é ótimo para tirar fotos, o foco é tirar fotos.
  • Mostre mais conteúdo do que controles.
  • Seja focado e direto, deixando os usuários imersos no que eles amam (foco da aplicação), e com certeza eles irão explorar o resto da App.
  • Inspire confiança nos usuários.

5. Win as one

Seja interoperável e integrador! Trabalhe com outras aplicações, dispositivos, crie cenários para que todos os usuários da sua aplicação sejam atendidos, compartilhe conteúdo entre aplicações, obtenha vantagem utilizando algo que o usuário já conhece, como interações touch trazendo mais familiaridade e confiança, seguem as dicas:

  • Adeque a interface ao modelo de exibição, existem dispositivos de tela grande, outros de telas menores, além disso, teste sua aplicação em portrait (retrato), landscape (paisagem) e em snapstate (aplicação fechada ocupando 1/3 ou 1/4 da tela).
  • Reduza a redundância na sua interface.
  • Trabalhe integrado à outras aplicações utilizando os App Contracts.
  • Use as ferramentas e templates para promover consistência.

A princípio, esses são os 5 pilares principais que deve-se ter em mente quando você for criar o design de uma Windows Store App, espero que tenha ajudado, o guia geral de design para Windows Store Apps pode ser visto em design.windows.com.

Abraços, e até a próxima!

Categorias Boas Práticas, Design, Surface, Windows 8 - Marcações boas práticas, design, metro style, metro style apps, surface, windows 8, windows store, windows store apps

MDI – Windows Forms

set06
2012
3 Comentários Postado por Thiago Coelho

1. Introdução

Tenho visto nos fóruns muita gente perguntando como fazer para abrir Forms dentro de um Form principal em 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 sera o SDI, que significa “Single Document Interface”, nesse caso cada Form aberto representa uma janela diferente na aplicação, um exemplo seria 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):

Menu

Estrutura do menu principal



3. Mão no Código!

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

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 MdiParent de FormFilho1:

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 que 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:

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

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

Compile e execute a aplicação, abra varias vezes cada Form e veja que todos eles abrem dentro de FormPrincipal, minimize e maximize as janelas filhas abertas e veja que diferente da interface SDI, as janelas não aparecem na barra do menu iniciar, mas sim dentro de apenas uma janela, o FormPrincipal.

4. Forms Abertos

Imagine agora que você tem uma aplicação grande com a interface MDI e tem vários Forms abertos, uns minimizados e outros não e deseja ter um local no menu onde mostre todas as janelas abertas dentro da aplicação e que facilite a navegação entre elas? Você deve estar pensando que é algo muito complicado mas eu venho aqui desmentir seu pensamento e mostrar como é tão simples fazer isso.

Vá para a janela de propriedades de mnuPrincipal e altere a propriedade MdiWindowListItem para o nosso item de menu responsável por essa tarefa que no nosso caso é mnuFormsAbertos. Pronto! Ahhh Thiago, você tá mentindo né? Não estou, compile e execute sua aplicação, abra os Forms e veja como “magicamente” os Forms abertos foram parar lá no menu “Forms Abertos”:

Menu "Forms Abertos"

Menu “Forms Abertos”



5. Layout dos Forms Filhos

E se agora você quiser organizar as janelas abertas em cascata, lado a lado horizontal ou vertical ou até arranjar os Forms que estão minimizados.

Para isso, clique duas vezes em cada item do menu mnuJanela e adicione os seguintes códigos:

private void mnuCascata_Click(object sender, EventArgs e)
{
    this.LayoutMdi(MdiLayout.Cascade);
}

private void mnuHorizontal_Click(object sender, EventArgs e)
{
    this.LayoutMdi(MdiLayout.TileHorizontal);
}

private void mnuVertical_Click(object sender, EventArgs e)
{
    this.LayoutMdi(MdiLayout.TileVertical);
}

private void mnuIconesMinimizados_Click(object sender, EventArgs e)
{
    this.LayoutMdi(MdiLayout.ArrangeIcons);
}

Explicando o código acima, a função LayoutMdi é responsável por organizar o layout dos Forms filhos de FormPrincipal, aceita como parâmetro a Enum MdiLayout que contém 4 modos diferentes:

- Cascade: Os Forms são arranjados em cascata

- TileHorizontal: Os Forms são arranjados lado a lado horizontalmente

- TileVertical: Os Forms são arranjados lado a lado verticalmente

- ArranjeIcons: Os Forms estão minimizados são arranjados abaixo e a esquerda do FormPrincipal.

Compile e execute a aplicação, abra os 3 forms filhos e após clique no menu cascata, lado a lado horizontal e lado a lado vertical e veja as mudanças:

Lado a lado horizontalmente

Lado a lado horizontalmente

Lado a lado verticalmente

Lado a lado verticalmente

Agora minimize os 3 forms filhos, clique e arraste as janelas minimizadas para algum local da janela principal e depois clique no menu “Ícones Minimizados”, veja o resultado:

Ícones minimizados

Ícones minimizados



6. Algo mais com MDI

Você ainda pode obter uma coleção de todos os forms filhos que estão dentro do FormPrincipal através da coleção this.MdiChildren, veja o código a seguir que altera a propriedade Text de todos os forms filhos de FormPrincipal para “Novo Texto” contido em um evento de um botão chamado btnMdiChildren:

private void btnMdiChildren_Click(object sender, EventArgs e)
{
    foreach (Form form in this.MdiChildren)
    {
        form.Text = "Novo Texto";
    }
}

Também podemos utilizar a propriedade this.ActiveMdiChild para obter a instância do Form ativo na aplicação, o código a seguir, escreve “Novo Texto 2″ apenas no Form ativo, evento criado apra o botão btnActiveMdiChild:

private void btnActiveMdiChild_Click(object sender, EventArgs e)
{
    this.ActiveMdiChild.Text = "Novo Texto 2";
}

Sabendo então que podemos pegar a instância de qualquer Form aberto no FormPrincipal, temos um leque de operações para serem feitas entre as janelas, eu ensino como fazer comunicação entre Forms de 3 formas diferentes neste post.

Por hoje é tudo, seguem os samples em C# e VB.NET:

Projeto C#
Projeto VB.NET

Espero ter ajudado à todos, abraços e até logo!

Categorias .NET, C#, VB.NET, Windows Forms - Marcações .net, C#, form, layout, mdi, multiple interface document, VB.NET, windows forms

Eu quero aprender .NET

set05
2012
Deixe um Comentário Postado por Thiago Coelho

Escrevo esse post porque recentemente eu dei a palestra “Eu quero aprender .NET” em dois eventos extraordinários (TDC 2012 – São Paulo e o Fórum de Informática 2012 – Jundiaí), gostaria de deixar meus agradecimentos aos coordenadores dos dois eventos pela oportunidade de divulgar esse material rico que está ajudando aqueles que estão no início de suas carreiras e até muitos que já tem experiência. Agradecimentos ao Victor Cavalcante, Igor Abade e JP Clementi pelo  apoio prestado no TDC 2012 e também ao professor José Roberto Madureira e o coordenador Fabiano Orsi, ambos da Etec Vasco Antonio Venchiarutti pelo apoio prestado no Fórum de Informática 2012, em Jundiaí.

Deixo aqui também os slides da palestra que tem como objetivo centralizar os principais programas, materiais e cursos para aprender tecnologias Microsoft, especialmente .NET:

Eu quero aprender .NET from Thiago Coelho
Categorias .NET, Iniciante, Palestras - Marcações .net, aprender, eventos, forum de informatica 2012, iniciante, jundiaí, Microsoft, microsoft virtual academy, mva, palestra, palestras, slides, slideshare, tdc2012, thiagocoelho, vasco antonio venchiarutti

Verificar se um Form está aberto (C# / VB.NET)

jun28
2012
6 Comentários Postado por Thiago Coelho

Analisando o tráfego no blog, tenho visto muita gente procurando como verificar se um Form já foi aberto em VB.NET ou C#, a maioria tem caído em um outro post que explica como fazer comunicação entre forms, então resolvi criar este para sanar melhor sua dúvida.

Crie um projeto do tipo Windows Forms (C# ou VB.NET), já virá com o Form1, adicione outro Form e deixe como Form2 mesmo, adicione também um botão no Form1 e dê o nome de btnAbrirForm2.

Form1

Form1

Para o evento do botão criado, adicione o seguinte código:

C#

private void btnAbrirForm2_Click(object sender, EventArgs e)
{
    if (Application.OpenForms.OfType<Form2>().Count() > 0)
    {
        MessageBox.Show("O Form2 já está aberto!");
    }
    else
    {
        Form2 form = new Form2();
        form.Show();
    }
}

VB.NET

Private Sub btnAbrirForm2_Click(sender As System.Object, e As System.EventArgs) Handles btnAbrirForm2.Click
    If Application.OpenForms.OfType(Of Form2)().Count() > 0 Then
        MessageBox.Show("O Form2 já está aberto!")
    Else
        Dim form As New Form2()
        form.Show()
    End If
End Sub

Na propriedade Application.OpenForms, podemos encontrar uma coleção de Forms que estão abertos na aplicação e é através dos métodos OfType e Count que verificamos se existe o Form2 aberto, se estiver aberto, uma mensagem é exibida.

Resultado

Resultado

Espero ter ajudado a todos!

Abraços, Thiago Coelho!

Categorias .NET, C#, Iniciante, VB.NET, Windows Forms - Marcações .net, aberto, C#, form, VB.NET, verificar, windows forms

Entendendo os SQL JOINS

jun26
2012
Deixe um Comentário Postado por Thiago Coelho

Os SQL JOINS são utilizados para fazer junções entre tabelas, mas quem de nós nunca teve dúvidas e fritou o cérebro pensando como deveria ser feito esse JOIN? A imagem a seguir te ajudará muito como guia quando vier a dúvida!

SQL JOINS
SQL JOINS

Copie e compartilhe!

Abraços!

 

Categorias Iniciante, SQL - Marcações iniciante, join, join sql server, joins, joins no sql, sql, sql joins, sql server

Surface Cast

jun20
2012
Deixe um Comentário Postado por Thiago Coelho

Gostaria de começar esse post agradecendo ao amigo Maurício Júnior das comunidades ecode10 e aspneti pelo convite para gravar meu primeiro podcast  juntamente com meu amigo Marcelo Silva, que trabalha comigo na IT Group.

Nesse podcast, falamos e “filosofamos” da recente novidade apresentada pela Microsoft na última segunda-feria (18 de Junho), o Microsoft Surface. Segue também o link do vídeo gravado no evento de anúncio do Surface.

Surface Cast

Anúncio Surface

Categorias Podcasts, Surface - Marcações Microsoft, podcast, surface, tablet

Surface, o tablet da Microsoft

jun18
2012
2 Comentários Postado por Thiago Coelho

Chegou o dia esperado! Nesta segunda-feira a ansiedade de muitos era o que a Microsoft iria anunciar no evento secreto em Los Angeles, a qual convocou toda a mídia dizendo que faria um “grande anúncio”, entre as diversas especulações, o anúncio foi o que a maioria do público já apostava, o lançamento de um tablet próprio.

No evento foi servido champagne aos convidados e começou com o CEO Steve Ballmer contando um pouco sobre a história da empresa e dos grandes investimentos que formaram grandes produtos começando com mouses e teclados até os recentes Xbox e Kinect até que proferiu a seguinte frase: “Assim como o Windows 1 precisou de um mouse, nós queríamos que o Windows 8 tivesse seu próprio aparelho, e tivemos nossa visão sobre o que poderia ser um tablet”.

Então, apresentou o “Microsoft Surface”, nome dado ao novo produto.

Steve Ballmer apresenta o produto.

Steve Ballmer apresenta o produto.

O equipamento vem com um teclado acoplável de 3 mm de dois tipos: o Touch Cover, com botões sensíveis ao toque e o Type Cover, com as teclas tradicionais, também estará disponível em diversas cores e servirá como capa da tela do produto.

teclados do surface

Teclados do surface.

O Surface terá duas versões, Windows RT e Surface Pro. Ambas as versões terão uma tela de 10,6 polegadas, suporte ao Wi-Fi, entrada USB e saída HDMI.

A versão Windows RT é mais simplificada visando concorrer com os tablets atuais, com chip ARM, 9,3 mm de espessura, 64 GB de memória pesando 680 gramas.

Já a versão Surface Pro é mais robusta, vem com o Windows 8 completo, visa substituir um notebook, tem um processador Intel Core i5,  13,3 mm de espessura, chegando até 128 GB de memória e pesa 900 gramas, o que não é muito comparado aos notebooks atuais, este modelo já virá com o Office.

Segundo a Microsoft, o Surface Windows RT será lançado juntamente com o Windows 8 RT, em setembro/outubro, já o Surface Pro deve chegar após 3 meses, pelo começo de 2013.

A Microsoft também aproveitou para divulgar o site do Surface. Também já está disponível a gravação do anúncio.

Categorias Notícias, Surface - Marcações Microsoft, notícias, surface, tablet

Comunicação entre Forms

jun14
2012
Deixe um Comentário Postado por Thiago Coelho

Neste artigo, explicarei como trocar informações entre as janelas de uma aplicação Windows Forms. Os códigos de exemplo estão em C# mas no final do artigo também está disponível um sample em VB.NET.

Não existe 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 e Form2.

No Form1 adicione os seguintes controles:

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

Form1

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

Form2

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:

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″:

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″.

Form2 aberto

Form2 aberto

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”:

private void btnOpenForms_Click(object sender, EventArgs e)
{
    //verifica se o Form1 está aberto
    if (Application.OpenForms.OfType(Form1).Count() > 0)
    {
        Form form1 = Application.OpenForms["Form1"];
        //seta as propriedades dos controles de Form1 com os controles do Form2
        Label label1 = (Label)form1.Controls["label1"];
        label1.Text = textBox1.Text;
        form1.Text = textBox2.Text;
        ((TextBox)form1.Controls["textBox1"]).BackColor = textBox3.BackColor;
        //aumenta o tamanho do form
        form1.Size = new Size(400, 400);
    }
    else
    {
        MessageBox.Show("O Form1 não está aberto!");
    }
}

Através da propriedade Application.OpenForms, podemos encontrar uma coleção de Forms que estão abertos na aplicação, na primeira parte é verificado se o Form1 está aberto, caso ele esteja, pegamos sua referência e atribuímos à variável form1, atualizamos o Label, o TextBox e a propriedade Text do Form1 através de propriedades dos controles do Form2, veja também que não transferimos apenas dados entre os Forms, mas também atualizamos o tamanho de Form1.  Também é possível executar métodos e eventos do Form1, conforme sua necessidade.

Compile seu projeto e execute a aplicação, abra o Form2 através do botão criado no Form1, preencha os campos com os valores desejados e depois clique no botão “OpenForms” e veja o resultado obtido no Form1.

Resultado Form1

Resultado Form1

3. Por EventHandler:

A terceira e última forma mostrada no artigo é feita através de eventos e delegates, não vou entrar nesse assunto a fundo, mas caso você não conheça como funciona, segue as referências iniciais:

Delegates Tutorial (MSDN)

Events Tutorial (MSDN)

Adicione o seguinte código no Form2:

public delegate void OnDataChangeHandler(Hashtable info);
public event OnDataChangeHandler OnDataChange;

Neste código, estamos criando o EventHandler e o delegate para o evento OnDataChange, que será o notificador de mudança do Form2, para que futuramente o Form1 possa ser atualizado.

Ainda no Form2, adicione o seguinte código para o evento click do botão “EventHandler”:

private void btnEventHandler_Click(object sender, EventArgs e)
{
    Hashtable info = new Hashtable();
    info.Add("Valor1", textBox1.Text);
    info.Add("Valor2", textBox2.Text);
    info.Add("textBox3", textBox3);
    OnDataChange(info);
}

Note que estamos utilizado um Hashtable para guardar os objetos que queremos passar do  Form2 para o Form1, o Hashtable é passado por parâmetro no evento OnDataChange. Caso você não conheça um Hashtable, ele nada mais é do que uma tabela que server para guardar objetos vinculados à uma chave, veja a referência.

No Form1, adicione o seguinte linha para o evento click do botão “Abrir Form2″, adicione também o método form2_OnDataChange:

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.OnDataChange += new Form2.OnDataChangeHandler(form2_OnDataChange);
    form2.Show();
}

private void form2_OnDataChange(Hashtable info)
{
    label1.Text = info["Valor1"].ToString();
    this.Text = info["Valor2"].ToString();
    textBox1.BackColor = ((TextBox)info["textBox3"]).BackColor;
    this.Size = new Size(300, 155);
}

Para entender melhor o que se passa por aqui, pense como se fosse uma assinatura de uma revista, você deseja receber em sua casa todos os meses uma determinada revista, então você assina para que receba mensalmente a revista em sua casa, o Form1 faz exatamente isso, implementa o EventHandler OnDataChange de Form2 (assinar revista) criando o evento form2_OnDataChange (receber revista), toda a vez em que o botão “EventHandler” for clicado no Form2 (enviar revistas), esse evento será executado, note que você poderá fazer isso em quantos Forms você desejar e todos receberão a sua “revista”.

No evento form2_OnDataChange, recebemos o Hashtable enviado por parâmetro pelo Form2, buscamos por cada chave de referência e atualizamos o Form1, note que alteramos novamente o tamanho do Form1.

Compile seu projeto e execute a aplicação, abra o Form2 através do botão criado no Form1, preencha os campos com os valores desejados e depois clique no botão “EventHandler” e veja o resultado obtido no Form1.

Por hoje vou ficando por aqui, espero que tenham aprendido, seguem os samples em C# e VB.NET, se divirta, comente, critique e não deixe de tirar as suas dúvidas.

Projeto C#
Projeto VB.NET

Abraços, Thiago Coelho!

Categorias .NET, C#, VB.NET, Windows Forms - Marcações .net, C#, delegate, eventhandler, form, sample, VB.NET, windows forms
← Older Entries
Comunidade .NET Coders

Posts Recentes

  • 7Masters .NET
  • Windows 8 and Windows RT Product Guide
  • Princípios de design para Windows Store Apps
  • MDI – Windows Forms
  • Eu quero aprender .NET

Categorias

  • .NET (6)
  • Boas Práticas (2)
  • C# (4)
  • Design (1)
  • Iniciante (4)
  • Notícias (1)
  • Outros (1)
  • Palestras (2)
  • Podcasts (1)
  • SQL (1)
  • Surface (3)
  • VB.NET (4)
  • Windows 8 (2)
  • Windows Forms (3)

Tags

.net aberto aprender boas práticas C# delegate eventhandler eventos form forum de informatica 2012 iniciante join joins joins no sql join sql server jundiaí layout mdi Microsoft microsoft virtual academy multiple interface document mva notícias palestra palestras podcast sample slides slideshare sql sql joins sql server string stringbuilder surface tablet tdc2012 thiagocoelho vasco antonio venchiarutti VB.NET verificar windows 8 windows forms windows store windows store apps

COMUNIDADES

  • Blog Info na Veia
  • Blog NET Coders
  • Comunidade .NET Coders
  • ecode10
  • Windows 8 Brasil

CURSOS

  • Code Academy
  • Generation App
  • Microsoft Virtual Academy

PARCEIROS

  • Arthur Ciurilli
  • Fernando Henrique
  • Leonardo Lourenço
  • Marília Balbé
  • Priscila Sato
  • Thiago Chaves

THIAGO COELHO

  • Facebook
  • LinkedIn
  • Perfil MSDN
  • SlideShare
  • Twitter

EvoLve theme by Theme4Press  •  Powered by WordPress Thiago Coelho