Na verdade a lógica de transferência não está no SelectedIndexChanged.
A única coisa que eu fiz no SelectedIndexChanged, foi carregar os dados da conta selecionadaDestino (assim como os dados da conta remetente foram carregados no comboContas).
Eu perguntei isso por causa da resposta do exercício que não faz nenhuma modificação no SelectedIndexChanged, e por isso eu não sei como seria carregado o segundo combo box sem nenhuma alteração dentro.
Segue o trecho do código para você entender a dúvida:
private void comboContas_SelectedIndexChanged(object sender, EventArgs e)
{
Conta contaSelecionada = this.BuscaContaSelecionada();
this.MostraConta(contaSelecionada);
}
private void Form1_Load(object sender, EventArgs e)
{
Conta c1 = new Conta();
c1.Titular = new Cliente("Paulo Abreu");
c1.Numero = 1;
c1.Deposita(250);
Conta c2 = new ContaPoupanca();
c2.Titular = new Cliente("José Aldo");
c2.Numero = 2;
c2.Deposita(500);
this.contas = new Conta[2];
this.contas[0] = c1;
this.contas[1] = c2;
foreach (Conta conta in contas)
{
comboContas.Items.Add(conta.Titular.Nome);
}
foreach (Conta conta in contas)
{
cmbDestinoDaTransferencia.Items.Add(conta.Titular.Nome);
}
}
private void btnDepositar_Click(object sender, EventArgs e)
{
Conta contaSelecionada = this.BuscaContaSelecionada();
contaSelecionada.Deposita(Convert.ToDouble(txtValor.Text));
this.MostraConta(contaSelecionada);
}
private void btnSacar_Click(object sender, EventArgs e)
{
Conta contaSelecionada = this.BuscaContaSelecionada();
contaSelecionada.Saca(Convert.ToDouble(txtValor.Text));
this.MostraConta(contaSelecionada);
}
private void MostraConta(Conta contaSelecionada)
{
txtTitular.Text = contaSelecionada.Titular.Nome;
txtNumero.Text = contaSelecionada.Numero.ToString();
txtSaldo.Text = contaSelecionada.Saldo.ToString();
}
private Conta BuscaContaSelecionada()
{
int indiceSelecionado = comboContas.SelectedIndex;
return this.contas[indiceSelecionado];
}
private void btnTransferir_Click(object sender, EventArgs e)
{
Conta conta1 = BuscaContaSelecionada();
int indiceSelecionado = cmbDestinoDaTransferencia.SelectedIndex;
Conta conta2 = this.contas[indiceSelecionado];
conta1.Transfere(Convert.ToDouble(txtValor.Text), conta2);
this.MostraConta(conta1);
txtTitular2.Text = conta2.Titular.Nome;
txtNumero2.Text = conta2.Numero.ToString();
txtSaldo2.Text = conta2.Saldo.ToString();
}
private void cmbDestinoDaTransferencia_SelectedIndexChanged(object sender, EventArgs e)
{
int indiceSelecionado = cmbDestinoDaTransferencia.SelectedIndex;
Conta contaSelecionada = this.contas[indiceSelecionado];
txtTitular2.Text = contaSelecionada.Titular.Nome;
txtNumero2.Text = contaSelecionada.Numero.ToString();
txtSaldo2.Text = contaSelecionada.Saldo.ToString();
}