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

C#II - Cadastro de uma nova Conta Corrente

O codigo executa porém após eu inserir os valores no CadastroDeContas e clicar em Cadastrar o método AdicionaConta do Form1 apresenta erro, informando: NullReferenceException was unhandled.

Conta

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WSouza.CaixaEletronico2.Modelo.Contas
{
    public abstract class Conta
    {
        public string Titular;
        public int Agencia;
        public int Numero;
        public double Saldo { get; protected set; }

        public abstract void Saque(double valor);

        public void Deposito(double valor)
        {
            if(valor > 0)
            {
                this.Saldo += valor;
            }
        }

        public void Transfere(Conta conta, double valor)
        {
            this.Saque(valor);
            conta.Deposito(valor);
        }
    }
}

ContaCorrente

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WSouza.CaixaEletronico2.Modelo.Contas
{
    class ContaCorrente : Conta
    {
        public override void Saque(double valor)
        {
            if(valor >= this.Saldo)
            {
                this.Saldo -= valor;
            }
        }
    }
}

Form1

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;
using WSouza.CaixaEletronico2.Modelo.Contas;

namespace WSouza.CaixaEletronico2
{
    public partial class Form1 : Form
    {
        private Conta[] contas;
        private int qtdContas;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void comboCliente_SelectedIndexChanged(object sender, EventArgs e)
        {
            Conta contaSelecionada = (Conta)comboCliente.SelectedItem;

            this.MostraConta(contaSelecionada);
        }

        private void MostraConta(Conta conta)
        {
            textTitular.Text = conta.Titular;
            textNumero.Text = Convert.ToString(conta.Numero);
            textAgencia.Text = Convert.ToString(conta.Agencia);
            textAgencia.Text = Convert.ToString(conta.Saldo);
            textValor.Text = " ";
        }
        public void AdicionaConta(Conta cc)
        {
            this.contas[this.qtdContas] = cc;
            this.qtdContas++;

            comboCliente.Items.Add(contas);
        }

        private void btnAdiconarConta_Click(object sender, EventArgs e)
        {
            CadastroDeContas cadastro = new CadastroDeContas(this);
            cadastro.ShowDialog();
        }
    }
}

CadastroDeContas

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;
using WSouza.CaixaEletronico2.Clientes;
using WSouza.CaixaEletronico2.Modelo.Contas;

namespace WSouza.CaixaEletronico2
{
    public partial class CadastroDeContas : Form
    {
        private Form1 aplicacaoPrincipal;
        public CadastroDeContas(Form1 aplicacaoPrincipal)
        {
            this.aplicacaoPrincipal = aplicacaoPrincipal;
            InitializeComponent();
        }

        private void btnCadastrar_Click(object sender, EventArgs e)
        {          
            ContaCorrente cc = new ContaCorrente();

            cc.Numero = Convert.ToInt32(textNumCad.Text);
            cc.Agencia = Convert.ToInt32(textAgenciaCad.Text);
            cc.Titular = textTitularCad.Text;

            this.aplicacaoPrincipal.AdicionaConta(cc);
        }
    }
}
7 respostas

Fala cara beleza?

Verifica no form visual se o nome bate com comboCliente (propriedade name). No exercício está como comboContas.

Verifiquei o Form1 e o nome está como comboCliente mesmo o que me deixou com dúvida é que ele apresenta o errro na conta "cc" que passo por parâmetro.

Tenta trocar essa linha no método btnCadastrar


            ContaCorrente cc = new ContaCorrente();

Por essa:

Conta conta = new ContaCorrente() { Titular = c
liente, Numero = numero };

Também não funcionou continua acusando o mesmo erro de NullReferenceException was unhandled.

Tenta iniciar o QtdContas como 0 E pode ser que esteja faltando o casting tb:

//-- definir o casting this.aplicacaoPrincipal.AdicionaConta((conta)cc);

solução!
        private void Form1_Load(object sender, EventArgs e)
        {
//-- Criar o objeto contas
contas = new conta[]();
        }

Obrigado pelo apoio.

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