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

Aparece namespace no comboBox

Não consigo fazer meu comboBox mostrar o nomer do Titular, se coloco o DisplayMember = "Titular" ele mostra o namespace, se eu coloco DisplayMember = "Numero" ele funciona corretamente e aparece o número da conta no comboBox. Procurei nas Dúvidas, vi que o que resolveu o problema da pessoal fazer a propriedade, no meu caso já está feita, então não sei o que fazer.

E outra pergunta, como faço pra aparecer no comboBox algo como Número: 1, ou Cliente: "Titular".

segue minha classe Conta, Cliente e Form1

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

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

                contas = new Conta[1];

                Conta contaDoRudson = new ContaCorrente();
                contaDoRudson.Titular = new Cliente();
                contaDoRudson.Titular.Nome = "Rudson";
                contaDoRudson.Numero = 1;
                contas[0] = contaDoRudson;                         

            for (int i = 0; i < contas.Length; i++)
            {

                if (contas[i] == null)
                {
                     break;
                }
                comboContas.Items.Add(contas[i]);
                destinoDaTransferencia.Items.Add(contas[i]);
                comboContas.DisplayMember = "Titular";
                destinoDaTransferencia.DisplayMember = "Numero";
            }

        }

Classe Conta()

namespace Caelum.CaixaEletronico.Modelo.Contas
{
    public abstract class Conta
    {
        public int Numero { get; set; }
        public Cliente Titular { get; set; }
        public double Saldo { get; protected set; }

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

        public abstract void Saca(double valor);

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

        public double CalculaRendimentoAnual()
        {
            double saldoNaqueleMes = this.Saldo;

            for (int i = 0; i < 12; i++)
            {
                saldoNaqueleMes = saldoNaqueleMes * 1.007;
            }

            double rendimento = saldoNaqueleMes - this.Saldo;

            return rendimento;
        }
    }
}

Classe Cliente()

namespace Caelum.CaixaEletronico.Modelo.Usuarios
{
    public class Cliente
    {
        public string Nome { get; set; }
        public string Rg { get; set; }
        public string Cpf { get; set; }
        public string Endereco { get; set; }
        public int Idade { get; set; }
        private bool EEmancipado;

        public Cliente(string nome)
        {
            this.Nome = nome;
        }

        public Cliente() { }

        public bool PodeAbrirContaSozinho
        {
            get
            {
                var maiorDeIdade = this.Idade >= 18;
                var emancipado = (this.EEmancipado);
                var possuiCPF = !string.IsNullOrEmpty(this.Cpf);
                return (maiorDeIdade || emancipado) && possuiCPF;
            }
        }

        public bool EhMaiorDeIdade()
        {
            return this.Idade >= 18;
        }

        public override bool Equals(object obj)
        {
            Cliente cliente = (Cliente)obj;
            return this.Rg.Equals(cliente.Rg) && this.Cpf.Equals(cliente.Cpf);
        }
        public override string ToString()
        {
            return "Nome: " + this.Nome + " RG: " + this.Rg + " CPF: " + this.Cpf;
        }
    } 
}
2 respostas
solução!

Oi Rudson, tudo bom?

Acredito que isso ocorra pois o c# está retornando seu titular inteiro como objeto e tentando escrever ele.

A escrita padrão de todo objeto é o full qualified name (nome da classe com namespace mais um hash). Para alterar essa escrita você pode sobrescrever o método ToString na sua classe Cliente =)

Algo como:

 public override String ToString()
   {
      return Nome;
   }

Muito obrigado! funcionou!