我有这种方法可以将Conta
个实例添加到名为" comboContas"的ComboBox
中:
public void AdicionaConta(Conta novaConta)
{
comboContas.Items.Add(novaConta);
comboContas.DisplayMember = "Titular";
}
请注意,我已将DisplayMember
属性设置为" Titular"。这是我的Conta
课程:
public abstract class Conta
{
public int Numero { get; set; }
public double Saldo { get; set; }
public Cliente Titular { get; set; }
public override string ToString()
{
return "titular: " + this.Titular.Nome;
}
}
现在," Titular"属于Cliente
类型。
这是Cliente
课程:
public class Cliente
{
public string Nome { get; set; }
public string Rg { get; set; }
public Cliente(string nome)
{
this.Nome = nome;
}
public override string ToString()
{
return "ToString do Cliente: " + this.Nome;
}
}
我想在" comboContas"中展示什么? ComboBox就像" ToString做Cliente:Gabriel"。
但是,ToString
类的Cliente
方法未被调用。相反,被调用者来自Conta
类。
这是非常简单的事情,我真的不知道发生了什么。如果我将DisplayMember
更改为任何其他属性,则可以。如果我改变" Titular"的类型对于任何其他类型的属性,将调用此另一种类型的ToString()
。它只是不适用于Cliente
。
答案 0 :(得分:3)
您的代码有问题(在每次添加之后而不是提前设置它?)因为它确实按预期工作。看看:
using System;
using System.Windows.Forms;
namespace Tests
{
public class Conta
{
public int Numero { get; set; }
public double Saldo { get; set; }
public Cliente Titular { get; set; }
public override string ToString()
{
return "titular: " + this.Titular.Nome;
}
}
public class Cliente
{
public string Nome { get; set; }
public string Rg { get; set; }
public Cliente(string nome)
{
this.Nome = nome;
}
public override string ToString()
{
return "ToString do Cliente: " + this.Nome;
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
var form = new Form { Padding = new Padding(16) };
var comboBox = new ComboBox { Dock = DockStyle.Top, Parent = form };
comboBox.DisplayMember = "Titular";
comboBox.Items.AddRange( new []
{
new Conta { Titular = new Cliente("Victor") },
new Conta { Titular = new Cliente("Mauricio") },
new Conta { Titular = new Cliente("csni") },
});
Application.Run(form);
}
}
}
结果:
答案 1 :(得分:0)
我不是百分之百确定你为什么做的不起作用,但一种可能有用的方法就是做这样的事情:
public class Client
{
public string DisplayName { get { return "ToString do Client: " + this.Nome; } }
}
然后,只需更改组合框以将DisplayMember绑定到DisplayName:
public void AdicionaConta(Conta novaConta)
{
comboContas.Items.Add(novaConta);
comboContas.DisplayMember = "Titular.DisplayName";
}
我希望这有帮助!