[英]C# combobox overridden ToString
我在使用ComboBox时遇到了一些问题。
我的组合框的显示成员没有被类MAP的重写ToString方法填充。
这是我的代码:
Form1.cs中:
private void Form1_Load(object sender, EventArgs e) {
...
...
MAPList MAP = new MAPList();
comboBox1.DataSource = MAP.All;
comboBox1.ValueMember = "Code";
...
...
}
MAPList.cs:
public class MAPList {
public readonly List<MAP> All;
public MAPList() {
All = new List<MAP>();
var MapData = // Getting map data
foreach(MAP m in MapData) {
All.Add(new Map(m.Name, m.Code));
}
}
}
MAP.cs:
public class MAP {
public readonly string Name;
private string code;
public string Code { get { return code; } }
public RadioCode(string Name, string Code) {
this.Name = Name;
this.code = Code;
}
public override string ToString() {
return String.Format("{0}: {1}", Name, Code);
}
}
如果设置ValueMember
则不会调用ToString。 如果您没有设置ValueMember
,它将按预期工作,但当然Code
不会被用作ComboBox的选定值。
或者,如果您希望使用ValueMember
您可能还需要设置DisplayMember
。 您可以在MAP
上创建用于显示的属性,即:
public class MAP
{
public readonly string Name;
private string code;
public string Code { get { return code; } }
public string Display { get { return ToString(); } }
public MAP(string Name, string Code)
{
this.Name = Name;
this.code = Code;
}
public override string ToString()
{
return String.Format("{0}: {1}", Name, Code);
}
}
然后,您可以在表单中设置DisplayMember
:
MAPList MAP = new MAPList();
comboBox1.DataSource = MAP.All;
comboBox1.ValueMember = "Code";
comboBox1.DisplayMember = "Display";
这是因为您已将ValueMember
属性设置为“Code”,因此组合框中的值不是Map
对象,而是与其Code
属性对应的字符串。
如果删除此行:
comboBox1.ValueMember = "Code";
......它会像你期望的那样工作。
如果你想让ComboBox根据你的Map
类型的ToString
方法显示它的项目,那么Jakob的答案是正确的:在你的Map
类型上创建一个属性,提供一个完全符合你想要的格式的字符串,并设置ComboBox的DisplayMember
属性到这个属性的名称。
我知道这是一个旧帖子,但是如果有人想要使用ToString()而不创建只调用ToString()的属性,则必须将DisplayMember值显式设置为空字符串,如下所示:
Form1.cs中:
private void Form1_Load(object sender, EventArgs e) {
...
...
MAPList MAP = new MAPList();
comboBox1.DataSource = MAP.All;
comboBox1.ValueMember = "Code";
comboBox1.DisplayMember = ""; // Explicitly set it to an empty String
...
...
}
这可能是因为你使用的是ValueMember。 使用DisplayMember属性,在获取此属性的Map类中添加另一个属性,返回格式化的字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.