«

»

abr 30

Passando Parâmetro entre Formulários no VB.Net

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:

30-04-2011 20-56-31.

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.

30-04-2011 21-06-18

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.

30-04-2011 21-33-49

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 Smiley de boca aberta

Bruno Maestro

Deus é Fiel!

6 comentários

Pular para o formulário de comentário

  1. Th!@go

    Parabens pelo site…..acompanharei com certeza…..
    e muito bacana o post, vlew por compartilhar….
    []´s

  2. Eduardo Antunes

    Muito bom cara!…
    Apesar de eu usar mais o metodo da Global achei a do constructor bastante interessante! ;)

  3. Cleyton Carvalho

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

    1. Bruno Maestro

      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

  4. alexprado

    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

    1. Bruno Maestro

      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.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>