Acredito que o problema esteja aqui:
namespace CaixaEletronico
{
public partial class Form1 : Form
{
private Conta[] contas;
private int quantidadeDeContas;
public Form1()
{
InitializeComponent();
}
public void AdicionaConta(Conta conta)
{
this.contas[this.quantidadeDeContas] = conta;
this.quantidadeDeContas++;
comboContas.Items.Add(conta);
}
private void Form1_Load(object sender, EventArgs e)
{
contas = new Conta[3];
Conta contaDoVictor = new ContaCorrente();
contaDoVictor.Titular = new Cliente();
contaDoVictor.Titular.Nome = "Victor";
contaDoVictor.Nome = contaDoVictor.Titular.Nome;
contaDoVictor.Numero = 1;
contas[0] = contaDoVictor;
Conta contaDoGuilherme = new ContaPoupanca();
contaDoGuilherme.Titular = new Cliente();
contaDoGuilherme.Titular.Nome = "Guilherme";
contaDoGuilherme.Nome = contaDoGuilherme.Titular.Nome;
contaDoGuilherme.Numero = 2;
contas[1] = contaDoGuilherme;
Conta contaDoMauricio = new ContaInvestimento();
contaDoMauricio.Titular = new Cliente();
contaDoMauricio.Titular.Nome = "Mauricio";
contaDoMauricio.Nome = contaDoMauricio.Titular.Nome;
contaDoMauricio.Numero = 3;
contas[2] = contaDoMauricio;
foreach (Conta conta in this.contas)
{
comboContas.Items.Add(conta);
destinoDaTransferencia.Items.Add(conta);
}
comboContas.DisplayMember = "Nome";
}
Criamos um contador para controlar quantas contas temos no nosso sistema, perfeito! e no método AdicionaConta incrementamos toda vez que uma conta nova é criada:
public void AdicionaConta(Conta conta)
{
this.contas[this.quantidadeDeContas] = conta;
this.quantidadeDeContas++; //incremento
comboContas.Items.Add(conta);
}
Mas, no formLoad não foi incrementado no contador as contas ja criadas:
private void Form1_Load(object sender, EventArgs e)
{
contas = new Conta[3];
Conta contaDoVictor = new ContaCorrente(); // criamos a primeira conta
contaDoVictor.Titular = new Cliente();
contaDoVictor.Titular.Nome = "Victor";
contaDoVictor.Nome = contaDoVictor.Titular.Nome;
contaDoVictor.Numero = 1;
contas[0] = contaDoVictor;
Conta contaDoGuilherme = new ContaPoupanca(); // criamos a segunda conta
contaDoGuilherme.Titular = new Cliente();
contaDoGuilherme.Titular.Nome = "Guilherme";
contaDoGuilherme.Nome = contaDoGuilherme.Titular.Nome;
contaDoGuilherme.Numero = 2;
contas[1] = contaDoGuilherme;
Conta contaDoMauricio = new ContaInvestimento(); // criamos a teceira conta
contaDoMauricio.Titular = new Cliente();
contaDoMauricio.Titular.Nome = "Mauricio";
contaDoMauricio.Nome = contaDoMauricio.Titular.Nome;
contaDoMauricio.Numero = 3;
contas[2] = contaDoMauricio;
foreach (Conta conta in this.contas)
{
comboContas.Items.Add(conta);
destinoDaTransferencia.Items.Add(conta);
}
comboContas.DisplayMember = "Nome";
}
Nesse momento nosso array ja tem as posições 0,1 e 2 ocupadas! Precisamos falar isso pro nosso contador:
private void Form1_Load(object sender, EventArgs e)
{
contas = new Conta[3];
Conta contaDoVictor = new ContaCorrente();
contaDoVictor.Titular = new Cliente();
contaDoVictor.Titular.Nome = "Victor";
contaDoVictor.Nome = contaDoVictor.Titular.Nome;
contaDoVictor.Numero = 1;
contas[0] = contaDoVictor;
Conta contaDoGuilherme = new ContaPoupanca();
contaDoGuilherme.Titular = new Cliente();
contaDoGuilherme.Titular.Nome = "Guilherme";
contaDoGuilherme.Nome = contaDoGuilherme.Titular.Nome;
contaDoGuilherme.Numero = 2;
contas[1] = contaDoGuilherme;
Conta contaDoMauricio = new ContaInvestimento();
contaDoMauricio.Titular = new Cliente();
contaDoMauricio.Titular.Nome = "Mauricio";
contaDoMauricio.Nome = contaDoMauricio.Titular.Nome;
contaDoMauricio.Numero = 3;
contas[2] = contaDoMauricio;
quantidadeDeContas = 3; // inicializa a quantidade de contas
foreach (Conta conta in this.contas)
{
comboContas.Items.Add(conta);
destinoDaTransferencia.Items.Add(conta);
}
comboContas.DisplayMember = "Nome";
}
Agora ao carregar o form, criamos 3 contas e ja dizemos que a quantidade de contas começa em 3 =)
Qualquer dificuldade, compartilha com a gente! bons estudos =)