1
resposta

Campo textoSaldo atualiza com o valor inserido apenas(não soma)

Galera, estou com o seguinte problema, quando executo o programa ele carrega o que está no Form1_Load:

private void Form1_Load_1(object sender, EventArgs e)
        {
            Conta conta = new Conta();
            Cliente cliente = new Cliente("Victor");
            conta.Titular = cliente;
            conta.Titular.Nome = "Victor";
            txtTitular.Text = conta.Titular.Nome;

            conta.Deposita(250.0);
            txtSaldo.Text = Convert.ToString(conta.Saldo);

            conta.Numero = 1;
            txtConta.Text = Convert.ToString(conta.Numero);
        }

Segue abaixo o trecho de código do botão Depositar:

private void button5_Click(object sender, EventArgs e)
        {
            Conta conta = new Conta();
            string numero = txtValor.Text;
            double valor = Convert.ToDouble(numero);

            conta.Deposita(valor);

            txtSaldo.Text = Convert.ToString(conta.Saldo);

        }

O campo Saldo(coloquei label com esse nome), apenas repete o valor inserido no campo Depósito(label), variável de acesso ao componente(txtValor). Por exemplo irá carregar 250 no campo Saldo, se inserir mais 100 no campo depósito e clicar em no botão depositar, o esperado era que o campo Saldo retorna-se o valor 350, no entanto retorna o valor inserido no campo depósito.

Classe Conta com os métodos:

 class Conta
    {
        public int Numero { get; set; }

        public Cliente Titular { get; set; }

        public double Saldo { get; private set; }

        public void Saca(double valorASacar)
        {
            if (valorASacar <= this.Saldo && valorASacar >= 0)
            {
                this.Saldo -= valorASacar;
            }

        }

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

        }

Como retornar o valor(no campo Saldo) realizando de fato a soma?

1 resposta

O problema é o seguinte, quando você inicia sua aplicação e carrega a conta no método load do form, você cria uma instância da classe "Conta". A partir desse momento os valores do seu objeto instanciado estão zerados, att você passa os valores pra ele no caso:

Conta conta = new Conta();
Conta conta = new Conta();
Cliente cliente = new Cliente("Victor");
conta.Titular = cliente;
conta.Titular.Nome = "Victor";
txtTitular.Text = conta.Titular.Nome;

conta.Deposita(250.0);
txtSaldo.Text = Convert.ToString(conta.Saldo);

conta.Numero = 1;
txtConta.Text = Convert.ToString(conta.Numero);

Até agora tudo bem. O problema vem quando você quando você faz um novo deposito, porque, no seu métido

private void button5_Click(object sender, EventArgs e)
{
    Conta conta = new Conta();
        string numero = txtValor.Text;
        double valor = Convert.ToDouble(numero);

        conta.Deposita(valor);       
    txtSaldo.Text = Convert.ToString(conta.Saldo);
}

Você instância um novo objeto "Conta" e os valores são zerados, assim perdendo todos os outros valores informados att o momento. Para corrigir é simple. Quando depositar mande o valor atual do saldo + o valor quer sacar assim sempre ficara atualizado. Espero que tenha entendido a explicação.

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