none
Referência nula em objeto instanciado RRS feed

  • Pergunta

  • Bom dia Pessoal.

    Estou migrando de aspNET para Windows Forms e estou esbarrei em um problema que não consigo entender.
    Em um projeto C# tenho dois forms, o primeiro com um dataGridView que exibe uma lista com clientes. No evento do DatagridView do Form 1, Pego o ID do meu cliente e o uso como parâmetro para recuperar no Form 2. Eu pelo Debug vejo que as informações são recuperadas, mas para instancia-las no TextBox do Form,  da como nula referencia. Abaixo seguem do debug:

    a seguir segue imagem dos dados recuperados. Eu fiz com Linq to SQL:

    o seguinte erro esta sendo me apresentado:

     posso estar deixando passar para este erro estar ocorrendo?

    segunda-feira, 21 de março de 2016 13:52

Respostas

  • Claudio, agora que vi.

    Tu tiraste o método "InitializeComponent" do construtor - o TextBox será nulo.

    Antes da linha 26 coloque:

    InitializeComponent();

    E acredito que o problema será resolvido.


    Att., Rafael Simor

    • Marcado como Resposta Claudio Moura segunda-feira, 21 de março de 2016 15:32
    segunda-feira, 21 de março de 2016 15:22

Todas as Respostas

  • Claudio,

    você tem que passar a referência para o novo form, antes complete load.

    Dê uma olhada aqui:

    Passing Data Between Forms

    Att,


    Antero Marques

    segunda-feira, 21 de março de 2016 14:08
  • txtCliente está setado (!= null)? Acho que o problema está nele...

    Att. Andre de Mattos Ferraz - www.iamferraz.com.br - http://mbsy.co/ldecrespigny/19022985

    segunda-feira, 21 de março de 2016 14:15
  • Bom dia Antero,

    Eu ja tin ha lido este artigo, na realidade foi nele pelo qual foi base para a implementação. 

    No Form 1 eu coloquei a seguinte código para referenciar no segundo Form:

    private void gridClientes_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
            {
                int intCliente = Convert.ToInt32(gridClientes.Rows[e.RowIndex].Cells[0].Value);
    
                frmCadastroEditaCliente edicaoCliente = new frmCadastroEditaCliente(intCliente);
                edicaoCliente.Tag = this;
                edicaoCliente.Show();
                Hide();
            }

    segunda-feira, 21 de março de 2016 14:27
  • Vou implementar aqui e já posto André
    segunda-feira, 21 de março de 2016 14:28
  • Bom dia.

    O atributo "Nome" está realmente com valor?

    Acredito que o problema estejas no teu encapsulamento, pois apesar dos campos PRIVADOS (eis o cadeado ao lado dos ícones de Field - o cubo azul) estarem com valor, a propriedade pública pode não estar.

    Ao cair na exception, recomendo dar um "Ok" e colocar o mouse tanto em cima do txtCliente quanto do .Nome (ou verificar nos autos, claro) para ver o que está quebrando.


    Att., Rafael Simor

    segunda-feira, 21 de março de 2016 14:51
  • Olá Rafael, 

    O nome está sendo instanciado sim 

    segunda-feira, 21 de março de 2016 15:06
  • Claudio, agora que vi.

    Tu tiraste o método "InitializeComponent" do construtor - o TextBox será nulo.

    Antes da linha 26 coloque:

    InitializeComponent();

    E acredito que o problema será resolvido.


    Att., Rafael Simor

    • Marcado como Resposta Claudio Moura segunda-feira, 21 de março de 2016 15:32
    segunda-feira, 21 de março de 2016 15:22
  • André,

    Sobre o fato de não estar setado, eu teria que usar if? 

    Eu fiz dessa forma, veja se está certo:

    public frmCadastroEditaCliente(int intCliente)
            {
                // TODO: Complete member initialization
                this.intCliente = intCliente;
    
                var cliente = (from p in db.Clientes
                               where p.ClienteID == intCliente
                               select p).SingleOrDefault();
    
                if (txtCliente != null)
                {
                    txtCliente.Text = cliente.Nome;
                }
            }

    segunda-feira, 21 de março de 2016 15:26
  • Rafael, foi exatamente isso!.

    O Form já tem o InitializeComponent() mas o Visual Studio gera um segundo construtor sem o Método.

    Obrigado pela ajuda e a todos que me auxiliaram!!!

    segunda-feira, 21 de março de 2016 15:35