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

A variável de Saldo não armazena o valor - Aula 3 - Depósito no caixa

Olá galera,

Estou com um problema, a minha variável de saldo não armazena o valor depois do método Deposito.

Segue os códigos

Botão

private void Form1_Load(object sender, EventArgs e)
        {
            Conta conta = new Conta();
            Cliente cliente = new Cliente();

            cliente.titular = "vinicius";
            conta.titular = cliente;
            textoTitular.Text = conta.titular.titular;

            textoConta.Text = Convert.ToString(1);

            //textSaldo.Text = Convert.ToString(250);


        }

        private void btnSaldo_Click(object sender, EventArgs e)
        {
            Conta conta = new Conta();

            conta.Deposita(Convert.ToDouble(textoValor.Text));

            textSaldo.Text = Convert.ToString(conta.Saldo);
        }
    }

Deposito

  public class Conta
    {
        public int numero { get; set; }
        public Cliente titular { get; set; }

        public double Saldo { get; private set; }

        //atributos agencias e cpf omitidos

        Cliente cliente = new Cliente("");

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

Alguém saberia o pq?

3 respostas

Oi Vinicius, tudo bom?

Acredito que o problema esteja na declaração da sua conta. Estamos criando uma conta no load do form e criamos outra conta ao clickar no botão:

private void Form1_Load(object sender, EventArgs e)
        {
       //aqui estamos criando uma conta
            Conta conta = new Conta();
            Cliente cliente = new Cliente();

            cliente.titular = "vinicius";
            conta.titular = cliente;
            textoTitular.Text = conta.titular.titular;

            textoConta.Text = Convert.ToString(1);

            //textSaldo.Text = Convert.ToString(250);


        }

        private void btnSaldo_Click(object sender, EventArgs e)
        {
       //ao clickar no botão estamos criando outra conta
            Conta conta = new Conta();

            conta.Deposita(Convert.ToDouble(textoValor.Text));

            textSaldo.Text = Convert.ToString(conta.Saldo);
        }
    }

O ideal seria a gente acessar a mesma conta. Ou seja, precisamos criar a conta em um lugar que os dois métodos consigam acessar. Ou seja, podemos extrair um atributo. Algo como:

// aqui declaramos a conta
private Conta conta;
// resto da classe
private void Form1_Load(object sender, EventArgs e)
        {
        // aqui criando a conta
            this.conta = new Conta();
            Cliente cliente = new Cliente();

            cliente.titular = "vinicius";
            conta.titular = cliente;
            textoTitular.Text = conta.titular.titular;

            textoConta.Text = Convert.ToString(1);

            //textSaldo.Text = Convert.ToString(250);


        }

        private void btnSaldo_Click(object sender, EventArgs e)
        {
   // aqui estamos apenas utilizando a conta já criada =)        
           this.conta.Deposita(Convert.ToDouble(textoValor.Text));

            textSaldo.Text = Convert.ToString(conta.Saldo);
        }
    }

Qualquer duvida é só falar.

Abraço e bons estudos.

Muito Obrigado pela resposta.

Se eu colocar o this.conta = new Conta() ele da erro. Ai coloquei

Conta conta = new Conta() no form_load

 public void Form1_Load(object sender, EventArgs e)
        {
            Conta conta = new Conta();
            Cliente cliente = new Cliente();

            cliente.titular = "vinicius";
            conta.titular = cliente;
            textoTitular.Text = conta.titular.titular;

            textoConta.Text = Convert.ToString(1);

            //textSaldo.Text = Convert.ToString(250);

Mas o sistema não reconhece o objeto conta, no botão. Diz que o nome conta não existe no contesto atual.

 public void btnSaldo_Click(object sender, EventArgs e)
        {
            //Conta conta = new Conta();

            conta.Deposita(Convert.ToDouble(textoValor.Text));

            textSaldo.Text = Convert.ToString(conta.Saldo);
        }
    }
}

Não sei oque pode ser, já mudei as propriedades para public.

solução!

Dei uma pesquisada e consegui resolver o problema.

O erro esta vendo aonde estava declarando as variáveis, como estava declarando elas dentro da classe elas só estavam acessíveis ali, fiz assim e funcionou.

 public partial class Form1 : Form
    {
        Conta conta = new Conta();
        Cliente cliente = new Cliente();

        public Form1()
        {
            InitializeComponent();
        }
public void Form1_Load(object sender, EventArgs e)
        {

            cliente.titular = "vinicius";
            conta.titular = cliente;
            textoTitular.Text = conta.titular.titular;

            textoConta.Text = Convert.ToString(1);

        }

Muito Obrigado pela ajuda