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

Atualização de Valores do comboBox || Duvidas!

Eu estou tentando fazer o "RendimentoAnual" da classe contas atualizar no "TextRendimento" toda vez que eu sacar ou depositar um valor.

tentei usar um

foreach (Conta conta in contas)
            {
                textRendimento.Text = Convert.ToString(conta.RendimentoAnual());
            }

Mas somente o segundo item do comboBox atualiza, de acordo com o que eu altero o saldo do mesmo.

Conta[] contas;
        Cliente[] clientes;
        TotalizadorDeContas SaldoTotal = new TotalizadorDeContas();
        public Form1()
        {
            InitializeComponent();
        }

        public void AtualizaRendimentoAnual()
        {
            foreach (Conta conta in contas)
            {
                textRendimento.Text = Convert.ToString(conta.RendimentoAnual());
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            contas = new Conta[2];
            clientes = new Cliente[2];

            contas[0] = new Conta();
            clientes[0] = new Cliente("Alexander");
            contas[0].Titular = clientes[0];
            contas[0].Numero = 1;
            contas[0].Titular.idade = 18;
            clientes[0].CPF = "123456789 - 00";
            clientes[0].EEmancipado = true;
            contas[0].Deposita(2500);

            contas[1] = new Conta();
            clientes[1] = new Cliente("Bassani");
            contas[1].Titular = clientes[1];
            contas[1].Numero = 2;
            clientes[1].CPF = "987654321 - 00";
            clientes[1].EEmancipado = true;
            contas[1].Titular.idade = 18;
            contas[1].Deposita(3000);

            foreach (Conta conta in contas) 
            {
                comboContas.Items.Add(conta.Titular.Nome);
            }
            foreach (Conta conta in contas)
            {
                comboTransfere.Items.Add(conta.Titular.Nome);
            }
            //Saldo Total
            foreach (Conta conta in contas)
            {
                SaldoTotal.AdicionaConta(conta);
            }
            foreach (Conta conta in contas)
            {
                SaldoTotal.RetiraConta(conta);
            }

            foreach(Conta conta in contas)
            {
                conta.RendimentoAnual();
            }

            foreach(Conta conta in contas)
            {
                textRendimento.Text = Convert.ToString(conta.RendimentoAnual());
            }

        }

        private void comboContas_SelectedIndexChanged(object sender, EventArgs e)
        {
            int indiceSelecionado = comboContas.SelectedIndex;
            Conta contaSeleciona = contas[indiceSelecionado];

            textTitular.Text = contaSeleciona.Titular.Nome;
            textNúmero.Text = Convert.ToString(contaSeleciona.Numero);
            textSaldo.Text = Convert.ToString(contaSeleciona.Saldo);
            textCPF.Text = contaSeleciona.Titular.CPF;
            textRendimento.Text = Convert.ToString(contaSeleciona.RendimentoAnual());
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string numero = textValor.Text;
            double valor = Convert.ToDouble(textValor.Text);
            int indiceSelecionado = comboContas.SelectedIndex;
            Conta contaSeleciona = contas[indiceSelecionado];
            contaSeleciona.Saca(valor);
            textSaldo.Text = Convert.ToString(contaSeleciona.Saldo);
            this.AtualizaRendimentoAnual();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string numero = textValor.Text;
            double valor = Convert.ToDouble(textValor.Text);
            int indiceSelecionado = comboContas.SelectedIndex;
            Conta contaSeleciona = contas[indiceSelecionado];
            contaSeleciona.Deposita(valor);
            textSaldo.Text = Convert.ToString(contaSeleciona.Saldo);
            this.AtualizaRendimentoAnual();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            string numero = textValor.Text;
            double valor = Convert.ToDouble(textValor.Text);

            int indiceSelecionado = comboContas.SelectedIndex;
            Conta contaSeleciona = contas[indiceSelecionado];

            int indiceSelecionado2 = comboTransfere.SelectedIndex;
            Conta contaSeleciona2 = contas[indiceSelecionado2];

            contaSeleciona.Transfere(valor, contaSeleciona2);

            textSaldo.Text = Convert.ToString(contaSeleciona.Saldo);
            this.AtualizaRendimentoAnual();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            foreach(Conta conta in contas)
            {
                SaldoTotal.AdicionaConta(conta);
            }
            textSaldoTotal.Text = Convert.ToString(SaldoTotal.ValorTotal);
            foreach (Conta conta in contas)
            {
                SaldoTotal.RetiraConta(conta);
            }
            this.AtualizaRendimentoAnual();
        }
class Cliente
    {
        public string Nome { get; set; }
        public string CPF { get; set; }
        public string Endereco { get; set; }
        public Cliente(string nome)
        {
            this.Nome = nome;
        }
        public int idade { get; set; }
        public bool EEmancipado { get; set; }
        public bool PodeAbrirConta
        {
            get
            {
                var MaiorDeIdade = this.idade >= 18;
                var possuiCPF = !string.IsNullOrEmpty(this.CPF);
                var emancipado = this.EEmancipado;

                return (MaiorDeIdade || emancipado) && possuiCPF;
            }
        }
    }
class Conta
    {
        public Cliente Titular { get; set; }
        public int Numero { get; set; }
        public double Saldo { get; protected set; }

        public virtual bool Saca(double valor)
        {
            if (this.Saldo >= valor && valor > 0)
            {
                if (Titular.PodeAbrirConta)
                {
                    this.Saldo -= valor;
                    return true;
                }
                else
                {
                    if (valor <= 200)
                    {
                        this.Saldo -= valor;
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
            else
            {
                return false;
            }
        }

        public bool Deposita(double valor)
        {

            if (valor > 0)
            {
                this.Saldo += valor;
            }
            return true;
        }

        public void Transfere(double valor, Conta destinatario)
        {
            this.Saca(valor);
            destinatario.Deposita(valor);

        }

        public virtual void AtualizaSaldo(double taxa)
        {
            this.Saldo -= Saldo * taxa;
        }

        public double RendimentoAnual()
        {
            double SaldoDoMes = this.Saldo;
            for(int i = 1; i <= 12; i++)
            {
                SaldoDoMes *= 1.007;
            }
            double Rendimento =SaldoDoMes - this.Saldo;
            return Rendimento;
        }
    }
2 respostas

Para cada conta do laço de repetição FOREACH ele vai sobrescrever o valor que tiver em textRendimento.Text mostrando somente o valor referente ao rendimento da última conta na qual parou a repetição.

Se você quer mostrar somente o rendimento de determinada conta em específico, não precisa percorrer todas contas, basta passar a conta especifica por parâmetro.

//Errado:
 foreach(Conta conta in contas)
            {
                textRendimento.Text = Convert.ToString(conta.RendimentoAnual());
            }

//Correto:
 public void AtualizaRendimentoAnual(Conta conta)
        {
                textRendimento.Text = Convert.ToString(conta.RendimentoAnual());
        }
solução!

Obrigado pela ajuda, mas não deu pra implementar o seu método.

Error CS0051 Inconsistent accessibility: parameter type 'Conta' is less accessible than method 'Form1.AtualizaRendimentoAnual(Conta)'