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 no Label.

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 como OK quando o botão é clicado;

  • No Form1, o ShowDialog() verifica o valor de DialogResult após o fechamento do formulário. Se for OK, 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:

Aprenda do zero ou aprimore seus conhecimentos em C#. Domine os conceitos de Orientação a Objetos e crie sistemas complexos integrados com banco de dados.

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:

CLIQUE AQUI E SAIBA MAIS

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

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *