C# 列表框项目显示不正确
我有一个listbox和一个ListItem对象,我正在将它们添加到listbox中,这样我就可以从所选项目中检索一个与显示的成员不同的值C# 列表框项目显示不正确,c#,winforms,C#,Winforms,我有一个listbox和一个ListItem对象,我正在将它们添加到listbox中,这样我就可以从所选项目中检索一个与显示的成员不同的值 class ListItem { public string DisplayMember; public string ValueMember; public ListItem(string n,string v){ DisplayMember = n; ValueMember = v; }
class ListItem
{
public string DisplayMember;
public string ValueMember;
public ListItem(string n,string v){
DisplayMember = n;
ValueMember = v;
}
}
public CompareTimeFramesForm()
{
InitializeComponent();
listBox1.Items.Add(new ListItem("# of Bookings", null));
listBox1.Items.Add(new ListItem("People", "guaranteed_count"));
}
这是winform供您参考。
我遇到的问题是,实际listbox中显示的项具有对象,而不是希望在ListItem构造函数的第一个参数中显示的字符串。
它看起来像Bookings.Helpers.ListItem,而不是Bookings.Helpers.ListItem
在designer中,我将displayMember属性更改为displayMember,但它不工作。来自MSDN:
将对象添加到ListBox时,除非在DisplayMember属性中指定了对象中的成员名称,否则控件将使用该对象的ToString方法中定义的文本
ListBox将调用ToString将项转换为字符串。在您的情况下,只需更改ListItem类,如下所示:
class ListItem
{
public string DisplayMember;
public string ValueMember;
public ListItem(string n,string v) {
DisplayMember = n;
ValueMember = v;
}
public override string ToString() {
return DisplayMember;
}
}
作为替代方案,您可以在designer中使用DisplayMember属性或使用代码来使用您调用的属性DisplayMember,但它的名称是免费的,因为必须指定它,并且它不使用任何约定:
listBox1.DisplayMember = "DisplayMember";
试试这个,它应该对你有用
class ListItem
{
public string DisplayMember;
public string ValueMember;
public ListItem(string n,string v){
DisplayMember = n;
ValueMember = v;
}
}
旁注:请避免在标题中添加标签。此外,Visual Studio is似乎不适用于您的问题标题或标记,因为您似乎没有构建任何类型的VS插件。这将仅使字符串值可选择,而不是ListItem对象。
public CompareTimeFramesForm()
{
InitializeComponent();
listBox1.Items.Add(new ListItem("# of Bookings", null).DisplayMember);
listBox1.Items.Add(new ListItem("People", "guaranteed_count").DisplayMember);
}