Ao desenvolver aplicações em Windows Forms com C#, é comum ter múltiplos formulários que interagem entre si. Um cenário típico envolve a passagem de dados de um formulário para outro, por exemplo, ao clicar em um botão para abrir um novo formulário e enviar informações já inseridas. Neste post, aprenda passagem de parâmetros entre formulários em C#.
1. Usando construtores para passar parâmetros
Uma maneira comum e simples de passar parâmetros entre formulários é utilizando construtores. Quando você cria uma instância de um novo formulário, pode passar valores para ele diretamente através do seu construtor.
Exemplo prático:
Neste exemplo, temos dois formulários. No Form1, vamos passar um valor de texto para o Form2 e exibir o valor em um Label
.
Passo 1: Criar form1
- Adicione um botão ao Form1 para abrir o Form2.
using System;
using System.Windows.Forms;
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnOpenForm2_Click(object sender, EventArgs e)
{
// Valor a ser passado para o Form2
string texto = "Olá, Form2!";
// Criando uma instância de Form2 e passando o texto pelo construtor
Form2 form2 = new Form2(texto);
form2.Show(); // Abre o Form2
}
}
Passo 2: Criar form2
- No Form2, adicione um
Label
para exibir o valor recebido.
using System;
using System.Windows.Forms;
public partial class Form2 : Form
{
// Construtor que aceita um parâmetro
public Form2(string mensagem)
{
InitializeComponent();
lblMensagem.Text = mensagem; // Exibe a mensagem no Label
}
}
Explicação:
- O Form1 cria uma instância de Form2, passando o valor da variável
texto
através do construtor; - O Form2 recebe o valor e o exibe no
Label
. Esse método é direto e útil quando o valor é conhecido no momento da criação do segundo formulário.
2. Usando propriedades públicas
Outra abordagem para passar dados entre formulários é usando propriedades públicas. Isso pode ser útil quando os dados a serem passados são determinados após a criação do formulário.
Exemplo:
Vamos usar uma propriedade pública no Form2 para definir o valor após sua instância ser criada.
Passo 1: Form1 (Chama form2)
private void btnOpenForm2_Click(object sender, EventArgs e)
{
// Cria uma instância de Form2
Form2 form2 = new Form2();
// Define o valor da propriedade pública antes de abrir o formulário
form2.Mensagem = "Texto vindo do Form1!";
form2.Show(); // Abre o Form2
}
Passo 2: Form2 (com propriedade pública)
using System;
using System.Windows.Forms;
public partial class Form2 : Form
{
// Propriedade pública para receber o valor
public string Mensagem { get; set; }
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
// Exibe a mensagem no Label quando o formulário carrega
lblMensagem.Text = Mensagem;
}
}
Explicação:
- O Form1 cria o Form2 sem passar parâmetros diretamente no construtor;
- Após a criação, o valor é definido através da propriedade pública
Mensagem
; - No evento
Form2_Load
, o valor da propriedade é exibido noLabel
.
3. Usando eventos para passar parâmetros
Outra técnica interessante é usar eventos personalizados para passar parâmetros de volta ao formulário que chamou. Isso é útil, por exemplo, quando o segundo formulário precisa retornar dados ao formulário original (como em uma janela de diálogo).
Exemplo de passagem com eventos:
Passo 1: Definir o evento no form2
using System;
using System.Windows.Forms;
public partial class Form2 : Form
{
// Define um evento para passar dados de volta
public event Action<string> OnMessageSent;
public Form2()
{
InitializeComponent();
}
private void btnEnviar_Click(object sender, EventArgs e)
{
// Dispara o evento passando a mensagem para o Form1
OnMessageSent?.Invoke(txtInput.Text);
// Fecha o Form2
this.Close();
}
}
Passo 2: Manipular o evento no Form1
private void btnOpenForm2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
// Manipula o evento que será disparado pelo Form2
form2.OnMessageSent += (mensagem) =>
{
// Recebe a mensagem de volta e exibe no Form1
lblMensagemRecebida.Text = mensagem;
};
form2.ShowDialog(); // Abre o Form2 como diálogo modal
}
Explicação:
- O Form2 define um evento chamado
OnMessageSent
, que será disparado quando o usuário clicar no botão Enviar; - No Form1, o evento
OnMessageSent
é manipulado para receber a mensagem e exibi-la no próprio formulário; - O
ShowDialog()
abre o Form2 como uma janela modal, que impede a interação com o Form1 até que o Form2 seja fechado.
4. Usando formulários modais com DialogResult
Você também pode passar parâmetros usando formulários modais e o DialogResult
para retornar valores. O ShowDialog()
abre um formulário modal e pode ser usado para coletar informações e enviá-las de volta após o formulário ser fechado.
Exemplo de uso de DialogResult
:
Passo 1: Form2 com DialogResult
private void btnOk_Click(object sender, EventArgs e)
{
// Armazena o valor de retorno
this.DialogResult = DialogResult.OK;
// Fecha o Form2
this.Close();
}
Passo 2: Receber o valor no Form1
private void btnOpenForm2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
// Abre o Form2 como modal
if (form2.ShowDialog() == DialogResult.OK)
{
// Executa ações após o Form2 ser fechado com OK
lblResultado.Text = form2.txtInput.Text;
}
}
Explicação:
- O Form2 define o
DialogResult
comoOK
quando o botão é clicado; - No Form1, o
ShowDialog()
verifica o valor deDialogResult
após o fechamento do formulário. Se forOK
, ele obtém os dados do Form2.
Esse método é ideal para diálogos de confirmação ou entrada de dados, como em janelas de “Salvar”, “Confirmar”, etc.
Outro exemplo prático
O código abaixo utiliza os métodos get e set para recuperar as informações. Também está disponível uma videoaula sobre o tema. Veja:
this.Informacao = "Informação relevante"; //Informação a ser recuperada
//métodos get/set que irá recuperar a informação
public string Usuario { get; set; }
//No form que receberá a informação, escreva os seguintes códigos:
public Form2(string informacao) { //método construtor do Form2
this.Informacao = informacao; //recebe a informação recuperada
MessageBox.Show(Informacao); //exibe a informação recuperada
}
//método get/set para recuperar a informação recebida
public string Informacao { get; set; }
Videoaula:
CONHEÇA O CURSO COMPLETO DE C# COM + DE 100 AULAS PRÁTICAS. Tenha acesso vitalício e certificado de conclusão.
CLIQUE NA IMAGEM ABAIXO E CONFIRA MAIS DETALHES:
Dúvidas ou sugestões sobre passagem de parâmetros entre formulários em C#? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits
Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?
Sobre o Autor
0 Comentários