列表框项不能正确显示

本文关键字:显示 不能 列表 | 更新日期: 2023-09-27 18:11:45

我有一个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"));
}

这是一个信息供参考。我遇到的问题是,实际列表框中显示的项目具有对象,而不是我想在ListItem构造函数的第一个参数中显示的字符串。看起来像Bookings.Helpers.ListItem而不是"# of reservations"

在设计器中,我将displayMember属性更改为displayMember,但它不起作用

列表框项不能正确显示

From MSDN:

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

ListBox将item转换为调用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";

试试这个,它应该为你工作!

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