Um tema que é frequentemente perguntado nos fóruns do MSDN é como passar dados entre Formulários com Windows Forms. Falarei em partes de algumas formas que podemos utilizar para isso.
Primeiro de tudo, criaremos um novo projeto Windows Form e criaremos 2 Forms, um com o nome frmEnvia e o outro frmRecebe.
1 – Criaremos no frmEnvia
- 1 Botão com o nome btnEnviar e com o texto Enviar
- 1 TextBox com o nome txtValorDevolvido.
2 – Criaremos no frmRecebe
- 1 Botão com o nome btnDevolver e com o texto Devolver.
- 1 TextBox com o nome txtValorRecebido
Enviando Pelo Construtor
Vamos ao Código do formulário frmRecebe e dentro da Classe colocamos um parâmetro no Construtor do formulário, que quer dizer que quando esse formulário for instanciado nós obrigaremos a passar o valor que será recebido. Nesse construtor podemos fazer sobrecarga para aceitar criar o formulário passando valor e para criar sem passar valor, no nosso caso obrigaremos a passar o valor utilizando somente 1 Sub New. Ficando o código da seguinte forma:
Public Class frmRecebe
Public Sub New(ByVal valor As String)
InitializeComponent()
'Atribui ao txtValorRecebido o valor enviado por Parâmetro
txtValorRecebido.Text = valor
End Sub
End Class
Obs: Precisamos nesse caso de colocar dentro do no nosso Sub New o método InitializeComponent que é responsável por carregar os componentes da tela. Qualquer implementação que fizermos com os controles do formulário, faremos abaixo desse código.
Lembrando também que nesse exemplo usamos um tipo string como parâmetro mas poderíamos usar qualquer outro tipo de objeto como: classe, formulário, tipos primitivos, etc.
Vamos para o outro formulário, o frmEnvia e damos 2 cliques sobre o botão btnEnviar. Criamos uma nova instância do frmRecebe.
Obs: Se observarmos, na criação do frmRecebe como criamos apenas um Sub New para receber o parâmetro, se não passarmos o parâmetro receberemos um erro como na imagem abaixo:
O código para o Envio seria:
Public Class frmEnvia
Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
'Aqui Passamos como parâmetro o valor que estiver no txtValorDevolvido
Dim meuForm As New frmRecebe(txtValorDevolvido.Text)
meuForm.ShowDialog()
End Sub
End Class
Se rodarmos (F5), veremos que ao clicar no botão envia é chamado o frmRecebe e popula o txtValorRecebido conforme queríamos.
Atribuindo o valor a uma Variável
Podemos também criar uma variável global no frmRecebe ou uma propriedade e atribuir o valor a ela após ter criado a sua instância no frmEnvia.
Para esse exemplo os formulário devem estar no formato de criação, sem ter feito a opção “Enviando Pelo Construtor”
No frmRecebe dentro da Classe declaramos a variável do tipo Pública ou criamos uma propriedade, nesse exemplo usaremos a variável:
Public ValorRecebido As String
No Evento Load do Form:
Private Sub frmRecebe_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
txtValorRecebido.Text = ValorRecebido
End Sub
E no frmEnvia preenchemos essa variável no click do botão Enviar:
Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
'Aqui Passamos como parâmetro o valor que estiver no txtValorDevolvido
Dim meuForm As New frmRecebe
meuForm.ValorRecebido = txtValorDevolvido.Text
meuForm.ShowDialog()
End Sub
Pronto, para uma melhor prática faríamos dessa forma.
Se rodarmosa aplicação veremos o resultado como no método acima.
Devolvendo Valor para o Form que Chamou
Em alguns casos precisamos processar um valor e devolver para o form que fez a chamada.
Usaremos o Exemplo acima “Atribuindo o Valor a uma Variável” para enviar o valor do frmEnvia para o frmRecebe.
Para devolvermos um valor para do frmRecebe para o frmEnvia, faremos da seguinte forma:
1 – Criaremos uma propriedade no frmRecebe para que o frmEnvia, ou seja o form que fez a chamada, acesse essa propriedade para pegar esse valor que foi processado.
Private _ValorDevolvido As String
Public Property ValorDevolvido() As String
Get
Return _ValorDevolvido
End Get
Set(ByVal value As String)
_ValorDevolvido = value
End Set
End Property
2 – Damos 2 cliques no botão btnDevolver do frmDevolve e colocaremos o seguinte código:
Private Sub btnDevolver_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDevolver.Click Me._ValorDevolvido = txtValorRecebido.Text Me.Close() End Sub
3 – Voltamos ao frmEnvia e adicionamos as seguinte linha que está em Negrito no código que já havíamos criado para chamar o frmRecebe:
Public Class frmEnvia
Private Sub btnEnviar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
'Aqui Passamos como parâmetro o valor que estiver no txtValorDevolvido
Dim meuForm As New frmRecebe
meuForm.ValorRecebido = txtValorDevolvido.Text
meuForm.ShowDialog()
'Aqui pegamos o valor devolvido e atribuimos ao txtValorDevolvido
txtValorDevolvido.Text = meuForm.ValorDevolvido
End Sub
End Class
Se alterarmos o valor recebido no frmRecebe e clicar no botão Devolver, veremos que esse valor alterado agora será atribuido no frmEnvia.
Veremos outras formas de passar parâmetro em um outro tutorial!
Bom, é isso Pessoal. Espero que tenham gostado e até a próxima.
.Net Cool ![]()
Bruno Maestro
Deus é Fiel!

6 comentários
Pular para o formulário de comentário ↓
Th!@go
3 de agosto de 2011 em 13:01 (UTC -3) Link para este comentário
Parabens pelo site…..acompanharei com certeza…..
e muito bacana o post, vlew por compartilhar….
[]´s
Eduardo Antunes
3 de agosto de 2011 em 17:03 (UTC -3) Link para este comentário
Muito bom cara!…
Apesar de eu usar mais o metodo da Global achei a do constructor bastante interessante!
Cleyton Carvalho
21 de novembro de 2011 em 18:53 (UTC -3) Link para este comentário
Óla a todos, gostaria de saber se alguem poderia me dizer como passar itens selecionados de um CheckedListBox para um text box ou algo similar.
Obrigado.
Bruno Maestro
29 de novembro de 2011 em 9:56 (UTC -3) Link para este comentário
Você pode capturar os itens selecionados pelo CheckedItems e jogar numa variável e passar essa variável como parâmetro em um dos métodos citados no Post. Para pegar os itens selecionados pode fazer assim:
Dim selecionados As String = String.Empty
For Each item As String In Me.CheckedListBox1.CheckedItems
selecionados &= item & " "
Next
TextBox1.Text = selecionados
alexprado
19 de setembro de 2012 em 21:52 (UTC -3) Link para este comentário
Ola, estou com um problema e quero saber se alguem pode me ajudar..
Preciso acessar textboxs e buttons de um executavel que não foi feito em vb..na verdade não sei a linguagem que foi feito e não tenho o nome das caixas de texto e botões..
pelo que vi posso chamar esse procedimento de supervisorio…e a unica solução que achei foi enviar (tab) varias vezes com o executavel em foco para chegar ao botão que preciso acionar (uso então o (enter) com sendkey) ou as caixas de texto para inserir valore (também com sendkey).
Será que existe algum comando para facilitar tal processo..??
Obrigado
Bruno Maestro
24 de setembro de 2012 em 23:47 (UTC -3) Link para este comentário
Pra conseguir fazer isso você vai ter que usar apis do windows e para identificar o handle do texbox que quer você pode usar um aplicativo chamado spy++. Em breve vou fazer um post de como fazer isso com a calculadora do windows.