[英]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.