VB .NET - Passando valores entre formulários
Existe uma dúvida recorrente para quem esta começando a aprender a linguagem VB .NET.
Como passar valores de um formulário para outro em uma aplicação Windows Forms ?
Neste artigo eu mostro algumas maneiras de realizar esta tarefa, embora existam muitos outras formas.
Eu vou usar o Visual Basic 2010 Express Edition para criar o projeto exemplo deste artigo.
Abra o VB 2010 Express e crie um novo projeto Windows Forms no menu File -> New Project -> Windows Forms Application , e informe o nome passandoValoresEntreFormularios e clique em OK;
Será criado a solução contendo o formulário form1.vb.
A seguir inclua um segundo formulário no projeto no menu Project -> Add Windows Forms e aceite o nome padrão form2.vb.
A seguir inclua um controle TextBox , um controle Label e um controle Button no formulário form1.vb conforme figura abaixo:
A seguir inclua no formulário form2.vb um controle Label e um controle ListBox conforme a figura abaixo:
Nosso objetivo é mostrar como passar valores do formulário form1.vb para o formulário form2.vb.
Embora, como eu já disse, existam muitas formas de passar valores entre formulários, esse artigo aborda 3 maneiras de realizar esta tarefa as quais são:
1-) Passando valores entre formulários : usando um construtor
Usar um construtor é uma das formas mais fáceis de passar valores entre formulário dependendo da situação.
Para tanto você precisa saber o que é um construtor. Abaixo eu vou dar a definição que foi tirada de um de meus artigos (veja as referências):
O que é um
Construtor ? Um construtor , é um método especial que deve estar
presente em uma classe para que a classe possa ser instanciada. Um
construtor também é usado para inicializar as variáveis membros da classe.
No VB.NET este método é usado com o nome de
New.
|
Se você ainda não sabe os formulários são classes, se você duvida, basta abrir o código de um formulário para ver a declaração : Public Class Form1
Dessa forma podemos definir um construtor no formulário form2 preparando-o para receber o que desejamos passar. No exemplo eu quero passar uma string, então vamos abrir o formulário form2 na visão de código e definir o seguinte construtor:
Observe que no construtor definimos o parâmetro valorForm1 como uma string que será recebido e incluído no controle ListBox.
Agora o form2 esta preparado para receber o valor que desejamos passar.
E agora ? Como passamos o valor ?
Simplesmente devemos , no formulário form1.vb, criar uma instância do formulário form2.vb passando o valor da seguinte forma:
Agora é só executar o projeto e clicar no botão - Chamar form2.vb - do formulário form1.vb para que o valor seja passado para o formulário form2.vb conforme mostra a figura a seguir:
2-) Passando valores entre formulários : usando objetos
Para usar este método você tem que saber que objetos são tipos de referência e são criados no heap e não na pilha, quando usamos a palavra chave new.
Tipos de
dados por Valor e por referência Um tipo de dado e considerado tipo por valor se ele trata o dado dentro da sua própria alocação de memória. Já um tipo de dado por referência contêm um ponteiro para outra alocação de memória que gerencia o dado. Os tipos por valor incluem:
Os tipos por referência incluem:
Observação : O tipo String possui as seguintes características especiais:
|
Vamos então passar valores entre os formulários usando objetos da seguinte forma:
Parece um tanto confuso, mas com o exemplo vai clarear...
Para este exemplo ser executado temos que fazer os seguintes ajustes no projeto:
Agora no formulário form2 vamos declarar uma variável frm1 do tipo form1:
A seguir vamos definir o seguinte código no evento Click do controle Button2 do formulário form1:
Agora no evento Load do formulário form2 vamos incluir o código que recebe o valor do formulário form1:
Executando o projeto iremos obter:
3-) Passando valores entre formulários : usando propriedades
As propriedades são um dos conceitos fundamentais da orientação a objeto. Através das propriedades podemos acessar os estado de uma classe, sendo que elas encapsulam a informação de um objeto permitindo o acesso a elas de forma controlada.
Com isto
concluímos que propriedades são variáveis especiais que permitem encapsular
o código de uma classe. Geralmente as propriedades possuem os procedimentos Get e Set mas podemos usar os modificadores :
|
Para passar valores entre formulários usando propriedades vamos fazer o seguinte:
Para este exemplo ser executado temos que fazer os seguintes ajustes no projeto:
No formulário form1 vamos definir a propriedade text_Box1 somente leitura(ReadOnly) que obtém o valor da caixa de texto TextBox1 do formulário :
Em seguida no formulário form2 vamos definir a propriedade text_Box2 somente escrita (WriteOnly) que atribui o valor ao controle TextBox2:
No evento Click do controle Button3 vamos definir o código que obtém o valor da caixa de texto do formulário e atribui o valor a propriedade do formulário form2:
Executando o projeto iremos obter:
Uma outra forma bem simples de obter o valor de um controle de um formulário é usar o recurso My.Forms.
As classes My (disponíveis a partir da versão 2005 do VB .NET) são responsáveis pela criação de um atalho para recursos utilizados com muita freqüência e evitar a escrita de código para uma determinada funcionalidade.
Veja como é simples:
Inclua um botão no formulário form1 para chamar o formulário form2 e no seu evento Click inclua o seguinte código:
Private
Sub
Button4_Click(ByVal
sender As
System.Object,
ByVal
e As
System.EventArgs)
Handles
Button4.Click My.Forms.Form2.Show() End Sub |
No formulário form2 no evento Load já podemos obter o valor do controle TextBox1 do formulário form1 usando o seguinte código:
Private
Sub
Form2_Load(ByVal
sender As
System.Object,
ByVal
e As
System.EventArgs)
Handles
MyBase.Load TextBox3.Text = My.Forms.Form1.TextBox1.TextEnd Sub |
Executando o projeto teremos:
Podemos ainda usar delegates , interfaces, etc. mas creio que essas são as formas mais simples de passar valores entre formulários.
Pegue o projeto completo aqui: passandoValoresEntreFormularios.zip
Eu sei á penas VB .NET, mas eu gosto...
Referências:
Dando os primeiros passos - Escrevendo Código VB.NET - I - variáveis e constantes
Dando os primeiros passos - Escrevendo Código VB.NET - II - operadores e funções básicas
Dando os primeiros passos - Escrevendo Código VB.NET - III - sub-rotinas e funções