C# 列表框项目显示不正确

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; }

我有一个listbox和一个ListItem对象,我正在将它们添加到listbox中,这样我就可以从所选项目中检索一个与显示的成员不同的值

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);
}