Usuário com melhor resposta
Erro form

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."}
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- Editado André SeccoMVP segunda-feira, 14 de novembro de 2016 11:58
- Marcado como Resposta Bruno Brandão da Silva segunda-feira, 14 de novembro de 2016 12:05
-
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- Marcado como Resposta Bruno Brandão da Silva segunda-feira, 14 de novembro de 2016 13:34
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- Editado André SeccoMVP segunda-feira, 14 de novembro de 2016 11:58
- Marcado como Resposta Bruno Brandão da Silva segunda-feira, 14 de novembro de 2016 12:05
-
-
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 -
-
-
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 -
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());
}
} -
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- Marcado como Resposta Bruno Brandão da Silva segunda-feira, 14 de novembro de 2016 13:34
-