4
respostas

criar list de contas no windows form

Criei um Windows Form com dois campos para o usuario digitar o ID e o Saldo da Conta e um button para cadastrar conta:

public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();
        }

        private void buttonCadastrarConta_Click(object sender, EventArgs e)
        {
            var contas = new List<Conta>();

            int id = int.Parse(textBoxID.Text);
            double valor = double.Parse(textBoxSaldo.Text);

            Conta novaConta = new Conta(id, valor);
            contas.Add(novaConta);
        }

        private void buttonMostrarQuantidadeDeContas_Click(object sender, EventArgs e)
        {
            MessageBox.Show(contas.Count);  // diz que contas não existe nesse contexto
        }
    }

Porém no contexto do onclick do button para visualizar o numero de contas, aparece que contas não é visível nesse contexto.

4 respostas

Transforme contas em um atributo da classe.

A variável foi criada dentro de buttonCadastrarConta_Click e só pode ser visível neste contexto.

Mas, se for um atributo da classe, será visível por todos os métodos.

public partial class Form1 : Form
    {
        public Conta contas;

Apareceu esse erro: Error CS0052 Inconsistent accessibility: field type 'Conta' is less accessible than field 'Form1.contas'

class Conta
    {
        public int ContaId { get; private set; }
        public double Saldo { get; private set; }

        public Conta(int id, double valor)
        {
            this.ContaId = id;
            this.Saldo = valor;
        }

        public bool Saca(double valor)
        {
            if (valor <= this.Saldo)
            {
                this.Saldo -= valor;
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool Deposita(double valor)
        {
            if (valor >= 0)
                return false;
            else
            {
                this.Saldo += valor;
                return true;
            }
        }

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

    }
}

Olá Ricardo, vê se te ajuda!

    public partial class Form1 : Form
    {

        private List<Conta> contas = new List<Conta>();

        public Form1()
        {
            InitializeComponent();
        }

        private void cadastrarContaButton_Click(object sender, EventArgs e)
        {
            int id = Convert.ToInt32(idTextBox.Text);
            double valor = Convert.ToDouble(valorTextBox.Text);
            contas.Add(new Conta(id, valor));
        }

        private void mostrarButton_Click(object sender, EventArgs e)
        {
            MessageBox.Show(contas.Count.ToString());
        }
    }

note que no seu código o método buttonMostrarQuantidadeDeContas_Click não possui a instancia da entidade contas, é necessário instanciar essa entidade no seu método, ou coloca no escopo global( aconselhável quando se usa muito a entidade no escopo)