Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro de Referencia de Objeto

O programa está compilando e rodando normalmente, só que quando eu vou cadastrar uma nova conta ocorre que ao clicar no botão de confirmação o programa retorna com um erro de referencia de objeto não definida para uma instancia de um objeto bem na hora de somar um na variável que alimenta o array dentro do "AdicionaConta".

''' using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;

namespace formularios { public partial class Principal : Form { private Conta[] ctas; //Criamos aqui um ATRIBUTO que guardará nosso array de contas int tipo = 0; private int qtdContas = 0; public Principal() { InitializeComponent(); }

private void cbcontas_SelectedIndexChanged(object sender, EventArgs e) { int indice = cbcontas.SelectedIndex; Conta contaSelecionada = this.ctas[indice];

this.Mostrar(contaSelecionada);

}

private void Mostrar(Conta contaSelecionada) { //txtnumero.Text = Convert.ToString(contaSelecionada.Numero); //txtsaldo.Text = Convert.ToString(contaSelecionada.Saldo); //txttitular.Text = contaSelecionada.titular; }

private Conta Buscar() { int chave = cbDestinatario.SelectedIndex; return this.ctas[chave]; }

private void operacao() { if (cbDestinatario.SelectedIndex < 0) { cbDestinatario.SelectedIndex = cbcontas.SelectedIndex; } string txtValor = txtVlr.Text; int indice = cbcontas.SelectedIndex; int inddest = cbDestinatario.SelectedIndex; Conta ctadst = this.ctas[cbDestinatario.SelectedIndex];

Conta ctaope = this.ctas[indice]; double vlrOpe = Convert.ToDouble(txtValor); if (vlrOpe <= 0) { MessageBox.Show("É necessário informar o valor da Operação!"); } else if (tipo == 1 && vlrOpe > 0 && vlrOpe > ctaope.Saldo) { MessageBox.Show("Saldo Insuficiente para esse saque!"); } else if (tipo == 3 && cbDestinatario.Text == "") { MessageBox.Show("É necessário um Destinatário para a Transferência!"); } else { if (tipo == 1) //Saques ctaope.saca(vlrOpe); else if (tipo == 2) //Depósitos ctaope.deposita(vlrOpe); else if (tipo == 3) //Transferências ctaope.transfere(vlrOpe, ctadst); this.Mostrar(ctaope); } txtVlr.Text = "0"; }

public void AdicionaConta(Conta cc) { this.ctas[this.qtdContas] = cc; this.qtdContas++;

cbcontas.Items.Add(cc); //adicionamos aqui a conta na combobox }

private void btSaque_Click(object sender, EventArgs e) { tipo = 1; //Saques operacao(); }

private void btDeposita_Click(object sender, EventArgs e) { tipo = 2; //Despósitos operacao(); }

private void btTransfere_Click(object sender, EventArgs e) { tipo = 3; //Transferências operacao(); }

private void button1_Click(object sender, EventArgs e) { CadastroDeContas cadastro = new CadastroDeContas(this); //Vai iniciar a tela de cadastro de conta corrente

cadastro.ShowDialog(); //Aqui iremos exibir a tela de cadastro de conta corrente }

} } '''

2 respostas
solução!

Olá Arildo

O problema é que em nenhum ponto do código você está inicializando o array de contas (variável ctas) da aplicação e por isso quando o seu código tenta acessá-lo, o C# lança um erro.

Além disso, dê uma olhada no seu método operacao(), ele é um método que faz o trabalho no estilo procedural de programação. Tente pensar em algum modo de remover esse método. Se tiver alguma dúvida sobre como fazer isso, poste uma nova pergunta no fórum para que possamos ajudá-lo.

O problema não está na hora de somar 1 à quantidade de contas. Está na hora de adicionar a nova conta ao array.

Você inicializou a variável qtdContas corretamente:

private int qtdContas = 0;

O problema é que, em nenhum momento, você inicializou o seu vetor:

private Conta[] ctas;

Você tem duas formas de fazer isso. Ou inicializa a variável como fez com qtdContas:

private Conta[] ctas = new Conta[10];

Ou inicializa usando o construtor da classe:

public Principal() { 
    InitializeComponent(); 
    this.ctas = new Conta[10];
}

OBS: Quando escrever uma dúvida, certifique-se que o código está legível. Foi difícil formatar e ler seu código para te ajudar.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software