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

Erros nos comandos no ComboBox

Olá novamente.

Estou com problemas para adicionar os itens no ComboBox, uma vez que o comando comboBox.Items.Add parece não funcionar. Eis o que tentei inicialmente, conforme a aula:

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {

        Conta[] contas;
        Cliente[] cliente;

        public Form1()
        {
            InitializeComponent();
        }



        public void Form1_Load(object sender, EventArgs e)
        {

            contas = new Conta[2];
            contas[0] = new Conta(200, 1);
            contas[1] = new Conta(100, 2);
            contas[0].numero = 1;
            contas[1].numero = 2;
            cliente = new Cliente[2];
            cliente[0] = new Cliente("Leandro", 25);
            cliente[1] = new Cliente("Leonardo", 18);
            contas[0].cliente = cliente[0];
            contas[1].cliente = cliente[1];

            foreach (Conta conta in contas)
            {
                comboBox1.Items.Add(conta.cliente.nome);
            }             
        }

O código compila sem erros, mas o ComboBox permanece vazio. Pesquisando na internet, encontrei uma alternativa, que seria criar um método para adicionar os itens no ComboBox, e então o código ficou assim:

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {

        Conta[] contas;
        Cliente[] cliente;


        public Form1()
        {
            InitializeComponent();
            this.comboBoxPopulate();
        }



        public void Form1_Load(object sender, EventArgs e)
        {

            contas = new Conta[2];
            contas[0] = new Conta(200, 1);
            contas[1] = new Conta(100, 2);
            contas[0].numero = 1;
            contas[1].numero = 2;
            cliente = new Cliente[2];
            cliente[0] = new Cliente("Leandro", 25);
            cliente[1] = new Cliente("Leonardo", 18);
            contas[0].cliente = cliente[0];
            contas[1].cliente = cliente[1];                      
        }

        private void comboBoxPopulate()
        {
            foreach (Conta conta in contas)
            {
                this.comboBox1.Items.Add(conta.cliente.nome);
            }
        }

Porém este retorna uma exceção, apontando para o "in" no foreach. O que estou fazendo de errado?

No primeiro método, conforme ensinado na aula do Victor, não consigo adicionar nenhum item ao combobox, seja ele variável ou string pré definida.

9 respostas

Tentei também alterar o foreach para um for simples mas continuo recebendo exceção, desta vez apontando para o i < contas.Lenght.

private void comboBoxPopulate()
        {
            for (int i = 0; i < contas.Length; i++ )
            {
                this.comboBox1.Items.Add(contas[i].numero);
            }
        }

Você já tentou executar o método durante o carregamento exemplo: Apos criar os clientes e contas e preencher na ultima linha do form_load coloca o seu metodo, this.comboBoxPopulate(); ou o coloca no envento onclick do seu combobox.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { comboBoxPopulate(); }

Tentei, ele compila sem erros, mas o combobox continua vazio

Alguma ajuda ae por favor, não consigo resolver esse problema!

Oi Leandro,

Você poderia ,por favor, postar o código das suas classes Conta e Cliente?

Classe Conta

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication6
{
    public class Conta
    {
        public int numero { get; set; }
        public double saldo { get; set; }
        public Cliente titular { get; set; }
        public Conta (double Saldo , int Numero){
            this.saldo = Saldo;
            this.numero = Numero;
        }


        public bool Deposita(double valor)
        {
            this.saldo += valor;
            return true;
        }

        public virtual bool Saca(double valor)
        {
           if (valor > this.saldo || valor < 0)
           {
               return false;
           }
           else
           {
               if (this.titular.maiorDeIdade())
               {
                   this.saldo -=valor;
                   return true;
               }
               else
               {
                   if (valor <= 200)
                   {
                       this.saldo-=valor;
                       return true;
                   } else {
                    return false;
                   }
               }
           }
        }

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

Classe Cliente

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WindowsFormsApplication6
{
    public class Cliente
    {
        public string nome { get; set; }
        public int idade;
        public Cliente(string Nome, int Idade)
        {
            this.nome = Nome;
            this.idade = Idade;
        }

        public bool maiorDeIdade()
        {
            return idade >= 18;
        }

    }
}

Leandro, me mande um e-mail pelo gabriel.ferreira@caelum.com.br se ainda estiver com problemas que te ajudo por lá (:

solução!

Leandro se não sou bom em form, conheço mais web, por isso vou dar uma sugestão: Mova todo o conteúdo do primeiro print (explicado na aula), para o método:

public Form1() { InitializeComponent(); }

e deixei o evento: public void Form1_Load(object sender, EventArgs e) {}

Deixando ele vazio, tenta ai.

Aí sim Claudio! Tinha resolvido de outra maneira, mas acabei esbarrando em outro problema, que era a duplicação dos itens do combobox quando selecionava algum deles. Agora, com a sua sugestão, resolvi tanto o problema do combobox vazio quanto da duplicação de itens.

SALVOU!