none
Erro form RRS feed

  • Pergunta

  • Estou tentando passar informações de um form para o outro quando clico na minha linha da grid view. Só que da esse erro na primeira linha. Já deixei todos os meus dados do outro meu form public.

     private void dgvCliente_MouseClick(object sender, MouseEventArgs e)
            {
                if (dgvCliente.SelectedRows.Count > 0)
                {
                    MeusFormularios.FormCliente.lblId.Text = dgvCliente.SelectedRows[0].Cells[0].Value.ToString();
                    MeusFormularios.FormCliente.textNome.Text = dgvCliente.SelectedRows[0].Cells[1].Value.ToString();
                    MeusFormularios.FormCliente.maskNascimento.Text = dgvCliente.SelectedRows[0].Cells[2].Value.ToString();
                    MeusFormularios.FormCliente.maskCPF.Text = dgvCliente.SelectedRows[0].Cells[3].Value.ToString();
                    MeusFormularios.FormCliente.maskRG.Text = dgvCliente.SelectedRows[0].Cells[4].Value.ToString();
                    MeusFormularios.FormCliente.textEndereco.Text = dgvCliente.SelectedRows[0].Cells[5].Value.ToString();
                    MeusFormularios.FormCliente.textNumero.Text = dgvCliente.SelectedRows[0].Cells[6].Value.ToString();
                    MeusFormularios.FormCliente.textBairro.Text = dgvCliente.SelectedRows[0].Cells[7].Value.ToString();
                    MeusFormularios.FormCliente.textCidade.Text = dgvCliente.SelectedRows[0].Cells[8].Value.ToString();
                    MeusFormularios.FormCliente.comboUF.Text = dgvCliente.SelectedRows[0].Cells[9].Value.ToString();
                    MeusFormularios.FormCliente.maskCEP.Text = dgvCliente.SelectedRows[0].Cells[10].Value.ToString();
                    MeusFormularios.FormCliente.maskTelefone.Text = dgvCliente.SelectedRows[0].Cells[11].Value.ToString();
                    MeusFormularios.FormCliente.maskCelular.Text = dgvCliente.SelectedRows[0].Cells[12].Value.ToString();
                    MeusFormularios.FormCliente.textEmail.Text = dgvCliente.SelectedRows[0].Cells[13].Value.ToString();
                }
            }

    {"Referência de objeto não definida para uma instância de um objeto."}

    segunda-feira, 14 de novembro de 2016 11:47

Respostas

  • Olá Bruno,

    Não recomendo deixar os controles dos Forms como public.

    O que recomendo que faça é um método em seu Form de destino, com todos os parâmetros que deseja alimentar seus controles. Aí a partir do seu form principal, você chama apenas o método que está nesse Form de destino e ele mesmo irá preencher os valores.

    Exemplo:

    Form de destino:

    public void PreencheValores(string id, string nome, ....)
    {
        lblId.Text = id;
        textNome.Text = nome;
        ...
    }


    Form que chama:

    FormCliente formCliente = new FormCliente();
    
    private void dgvCliente_MouseClick(object sender, MouseEventArgs e)
    {
       if (dgvCliente.SelectedRows.Count > 0)
       {
           formCliente.PreencherValores(dgvCliente.SelectedRows[0].Cells[0].Value.ToString(), dgvCliente.SelectedRows[0].Cells[1].Value.ToString(), .....);
       }
    }

    Dessa forma você pode reusar seu código e ele fica muito mais limpo e elegante.

    Espero ter ajudado!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    segunda-feira, 14 de novembro de 2016 11:57
  • Falta só um formCliente.ShowDialog() para abrir o outro form.

    Uma coisa que tem que ter em mente é que o mesmo objeto que você utilizou para abrir o form, será o mesmo que vai utilizar para chamar o método.

    Exemplo de como NÃO deve ser:

    frmCliente formCliente = new frmCliente();
    formCliente.ShowDialog();
    
    frmCliente formCliente2 = new frmCliente();
    formCliente2.PreecheDados(...);

    Nesse caso criei dois objetos do Tipo formCliente, portanto um não tem ligação com o outro.

    Exemplo de como deve ser:

    frmCliente formCliente = new frmCliente();
    formCliente.PreecheDados(...);
    formCliente.ShowDialog();

    Verifica isso.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 14 de novembro de 2016 13:27

Todas as Respostas

  • Olá Bruno,

    Não recomendo deixar os controles dos Forms como public.

    O que recomendo que faça é um método em seu Form de destino, com todos os parâmetros que deseja alimentar seus controles. Aí a partir do seu form principal, você chama apenas o método que está nesse Form de destino e ele mesmo irá preencher os valores.

    Exemplo:

    Form de destino:

    public void PreencheValores(string id, string nome, ....)
    {
        lblId.Text = id;
        textNome.Text = nome;
        ...
    }


    Form que chama:

    FormCliente formCliente = new FormCliente();
    
    private void dgvCliente_MouseClick(object sender, MouseEventArgs e)
    {
       if (dgvCliente.SelectedRows.Count > 0)
       {
           formCliente.PreencherValores(dgvCliente.SelectedRows[0].Cells[0].Value.ToString(), dgvCliente.SelectedRows[0].Cells[1].Value.ToString(), .....);
       }
    }

    Dessa forma você pode reusar seu código e ele fica muito mais limpo e elegante.

    Espero ter ajudado!

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    segunda-feira, 14 de novembro de 2016 11:57
  • Uma dúvida, esse Form destino é o que vai receber os dados?
    segunda-feira, 14 de novembro de 2016 12:04
  • Exato Bruno, nomeei dessa forma, mas no seu caso seria seu FormCliente

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 14 de novembro de 2016 12:15
  • Grato André!
    segunda-feira, 14 de novembro de 2016 12:25
  • André o erro não deu, porém não preencheu os dados da minha grid no outro form
    segunda-feira, 14 de novembro de 2016 13:09
  • Posta seu código, onde está chamando o método e onde está abrindo o form também

    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 14 de novembro de 2016 13:10
  • Form Cliente

    public void PreencheDados(string id, string nome, string nascimento, string CPF, string RG, string endereco, string numero, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email)
            {
                lblId.Text = id;
                textNome.Text = nome;
                maskNascimento.Text = nascimento;
                maskCPF.Text = CPF;
                maskRG.Text = RG;
                textEndereco.Text = endereco;
                textNumero.Text = numero;
                textBairro.Text = bairro;
                textCidade.Text = cidade;
                comboUF.Text = uf;
                maskCEP.Text = cep;
                maskTelefone.Text = telefone;
                maskCelular.Text = celular;
                textEmail.Text = email;
            }

    Consulta Cliente

    frmCliente formCliente = new frmCliente();
            private void dgvCliente_MouseClick(object sender, MouseEventArgs e)
            {
                if (dgvCliente.SelectedRows.Count > 0)
                {
                    formCliente.PreencheDados(dgvCliente.SelectedRows[0].Cells[0].Value.ToString(), dgvCliente.SelectedRows[0].Cells[1].Value.ToString(),
                        dgvCliente.SelectedRows[0].Cells[2].Value.ToString(), dgvCliente.SelectedRows[0].Cells[3].Value.ToString(),
                        dgvCliente.SelectedRows[0].Cells[4].Value.ToString(), dgvCliente.SelectedRows[0].Cells[5].Value.ToString(),
                        dgvCliente.SelectedRows[0].Cells[6].Value.ToString(), dgvCliente.SelectedRows[0].Cells[7].Value.ToString(),
                        dgvCliente.SelectedRows[0].Cells[8].Value.ToString(), dgvCliente.SelectedRows[0].Cells[9].Value.ToString(),
                        dgvCliente.SelectedRows[0].Cells[10].Value.ToString(), dgvCliente.SelectedRows[0].Cells[11].Value.ToString(),
                        dgvCliente.SelectedRows[0].Cells[12].Value.ToString(), dgvCliente.SelectedRows[0].Cells[13].Value.ToString());
                }
            }

    segunda-feira, 14 de novembro de 2016 13:12
  • Falta só um formCliente.ShowDialog() para abrir o outro form.

    Uma coisa que tem que ter em mente é que o mesmo objeto que você utilizou para abrir o form, será o mesmo que vai utilizar para chamar o método.

    Exemplo de como NÃO deve ser:

    frmCliente formCliente = new frmCliente();
    formCliente.ShowDialog();
    
    frmCliente formCliente2 = new frmCliente();
    formCliente2.PreecheDados(...);

    Nesse caso criei dois objetos do Tipo formCliente, portanto um não tem ligação com o outro.

    Exemplo de como deve ser:

    frmCliente formCliente = new frmCliente();
    formCliente.PreecheDados(...);
    formCliente.ShowDialog();

    Verifica isso.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    segunda-feira, 14 de novembro de 2016 13:27
  • Legal deu certo, grato pela ajuda!
    segunda-feira, 14 de novembro de 2016 13:34