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

Formulário de Cadastro vazio

No exercício de formulários da aula 04 é mostrado como fazer um novo formulário especificamente para cadastrar novas contas e colocar um botão no formulário principal que levaria a esse novo formulário. Fiz como mostrado na aula, porém quando executo o programa e clico no botão Nova Conta (no formulário principal) é aberto um formulário em branco, sem nenhum campo.

Código criado para o novo formulário com base na aula:

    public partial class CadastroDeContas : Form
    {
        public CadastroDeContas()
        {
            InitializeComponent();
        }

        public CadastroDeContas(Form1 form1)
        {
            this.form1 = form1;
        }

        private Form1 aplicacaoPrincipal;
        private Form1 form1;

        public void cadastroDeContas(Form1 aplicacaoPrincipal)
        {
            this.aplicacaoPrincipal = aplicacaoPrincipal;
        }

        private void botaoCadastro_Click(object sender, EventArgs e)
        {
            Conta novaConta = null;
            if (comboTipoConta.Text == "Corrente")
            {

                novaConta = new ContaCorrente();

            }
            if (comboTipoConta.Text == "Poupanca")
            {
                novaConta = new ContaPoupanca();
            }
            novaConta.Titular = new Cliente(titularConta.Text);
            novaConta.Numero = Convert.ToInt32(numeroConta.Text);
            this.aplicacaoPrincipal.AdicionaConta(novaConta);
        }
    }
}

Código do formulario principal:

namespace CaixaEletronico
{
    public partial class Form1 : Form
    {
        public Conta [] contas;
        private int quantidadeDeContas;


        public Form1()
        {
            InitializeComponent();
        }

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

            Conta contaDoVictor = new Conta();
            contaDoVictor.Titular = new Cliente();
            contaDoVictor.Titular.Nome = "Victor";
            contaDoVictor.Numero = 1;
            contas[0] = contaDoVictor;

            Conta contaDoGuilherme = new Conta();
            contaDoGuilherme.Titular = new Cliente();
            contaDoGuilherme.Titular.Nome = "Guilherme";
            contaDoGuilherme.Numero = 2;
            contas[1] = contaDoGuilherme;

            Conta contaDoMauricio = new Conta();
            contaDoMauricio.Titular = new Cliente();
            contaDoMauricio.Titular.Nome = "Mauricio";
            contaDoMauricio.Numero = 3;
            contas[2] = contaDoMauricio;

            foreach (Conta conta in this.contas)
            {
                comboContas.Items.Add(conta);
                destinoDaTransferencia.Items.Add(conta);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string textoValorSaque = valorOperacao.Text;

            double valorDeposito = Convert.ToDouble(textoValorSaque);

            int indiceSelecionado = comboContas.SelectedIndex;

            Conta contaSelecionada = this.contas[indiceSelecionado];
            contaSelecionada.Deposita(valorDeposito);

            this.MostraConta(contaSelecionada);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            string textoValorSaque = valorOperacao.Text;

            double valorSaque = Convert.ToDouble(textoValorSaque);
            Conta contaSelecionada = this.BuscaContaSelecionada();
            contaSelecionada.Saca(valorSaque);

            this.MostraConta(contaSelecionada);
        }

        private void MostraConta(Conta conta)
        {
            textoTitular.Text = conta.Titular.Nome;
            textoSaldo.Text = Convert.ToString(conta.Saldo);
            textoNumero.Text = Convert.ToString(conta.Numero);
        }

        private Conta BuscaContaSelecionada()
        {
            int indiceSelecionado = comboContas.SelectedIndex;
            return this.contas[indiceSelecionado];
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Conta c1 = new Conta();
            c1.Deposita(200.0);
            ContaPoupanca c2 = new ContaPoupanca();
            c2.Deposita(125.0);
            TotalizadorDeContas t = new TotalizadorDeContas();
            t.Soma(c1);
            t.Soma(c2);

            MessageBox.Show("valor total: " + t.ValorTotal);
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            string titularSelecionado = comboContas.Text;
            Conta contaSelecionada = this.BuscaContaSelecionada();
            this.MostraConta(contaSelecionada);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Conta contaSelecionada = this.BuscaContaSelecionada();

            int indiceDaContaDestino = destinoDaTransferencia.SelectedIndex;

            Conta contaDestino = this.contas[indiceDaContaDestino];

            string textoValor = valorOperacao.Text;
            double valorTransferencia = Convert.ToDouble(textoValor);

            contaSelecionada.TransferePara(contaDestino, valorTransferencia);

            this.MostraConta(contaSelecionada);

        }

        public void AdicionaConta(Conta contas)
        {
            this.contas[this.quantidadeDeContas] = contas;
            this.quantidadeDeContas++;
            comboContas.Items.Add(contas);

        }

        private void novaConta_Click(object sender, EventArgs e)
        {
            CadastroDeContas formularioDeCadastro = new CadastroDeContas(this);
            formularioDeCadastro.ShowDialog();
        }
    }
}
3 respostas

Olá, Thiago!

A tela que está vindo em branco é a do formulário formularioDeCadastro. Você pode postar aqui o código do `FormularioDeCadastro" para analisarmos? Obrigado!

O código do formulário que deveria aparecer é o primeiro que coloquei

 public partial class CadastroDeContas : Form
    {
        public CadastroDeContas()
        {
            InitializeComponent();
        }

        public CadastroDeContas(Form1 form1)
        {
            this.form1 = form1;
        }

        private Form1 aplicacaoPrincipal;
        private Form1 form1;

        public void cadastroDeContas(Form1 aplicacaoPrincipal)
        {
            this.aplicacaoPrincipal = aplicacaoPrincipal;
        }

        private void botaoCadastro_Click(object sender, EventArgs e)
        {
            Conta novaConta = null;
            if (comboTipoConta.Text == "Corrente")
            {

                novaConta = new ContaCorrente();

            }
            if (comboTipoConta.Text == "Poupanca")
            {
                novaConta = new ContaPoupanca();
            }
            novaConta.Titular = new Cliente(titularConta.Text);
            novaConta.Numero = Convert.ToInt32(numeroConta.Text);
            this.aplicacaoPrincipal.AdicionaConta(novaConta);
        }
    }
}

Sendo que o formularioDeCadastro é uma variavel local. Eu segui as instruções da aula 04, porém olhei o código do final da aula para comparar e ver o que posso ter errado, eu notei uma diferença. No código que eu fiz segundo a aula, foi usado

public CadastroDeContas(Form1 form1)
        {
            this.form1 = form1;
        }

no CadastroDeContas, enquanto nos arquivos da aula foi utilizado

private void CadastroDeContas_Load(object sender, EventArgs e)
        {
            this.comboTipoConta.Items.Add("Conta Corrente");
            this.comboTipoConta.Items.Add("Conta Poupança");
            this.comboTipoConta.Items.Add("Conta Investimento");
        }
solução!

Oi Thiago, eu tenho uma suspeita. Veja os construtores:

        public CadastroDeContas()
        {
            InitializeComponent();
        }

        public CadastroDeContas(Form1 form1)
        {
            this.form1 = form1;
        }

Note que o segundo construtor não tem o método InitializeComponent();, e eu acho que é isso. Esse método inicializa os controles que constroem a Form. Então você pode modificar o segundo construtor para chamar o primeiro (usando a técnica de "encadeamento de construtores):

        public CadastroDeContas(Form1 form1) : this()
        {
            this.form1 = form1;
        }