列表框项目无法正常显示

时间:2014-07-07 20:30:42

标签: c# winforms

我有一个列表框和一个ListItem对象,我将其添加到列表框中,以便我可以从所选项目中检索一个与显示的成员不同的值。

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 FYI。 我遇到的问题是实际列表框中显示的项目有对象,而不是我希望在ListItem构造函数的第一个参数中显示的字符串。 它看起来像Bookings.Helpers.ListItem而不是“#of Bookings”

在设计器中,我将displayMember属性更改为DisplayMember,但它无效。

2 个答案:

答案 0 :(得分:1)

来自MSDN:

  

当一个对象被添加到ListBox时,该控件使用该对象的ToString方法中定义的文本,除非在DisplayMember属性中指定了该对象中的成员名称。

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

作为替代方案,您可以使用DisplayMember属性(在设计器中或使用代码)来使用您的属性(您调用该属性DisplayMember但它的名称是免费的,因为它必须被指定并且它不会使用任何惯例):

listBox1.DisplayMember = "DisplayMember";

答案 1 :(得分:-1)

试试这个它应该适合你!

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).DisplayMember);
    listBox1.Items.Add(new ListItem("People", "guaranteed_count").DisplayMember);
}