Moo*_*oon 6 c# combobox overriding 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";
...
...
}
Run Code Online (Sandbox Code Playgroud)
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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
如果设置,将不会调用ToString ValueMember.如果你没有设置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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在表单中设置DisplayMember:
MAPList MAP = new MAPList();
comboBox1.DataSource = MAP.All;
comboBox1.ValueMember = "Code";
comboBox1.DisplayMember = "Display";
Run Code Online (Sandbox Code Playgroud)