2014-07-07 61 views
0

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

在设计器中,我将displayMember属性更改为DisplayMember并且它不工作。

+0

边注:请避免添加标签标题。另外“Visual Studio”似乎不适用于你的问题(标题或标签),因为你似乎没有构建任何类型的VS插件。 –

回答

1

从MSDN:

当一个对象被添加到列表框,控制使用,除非在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; 
    } 
} 

作为替代,你可以本身的DisplayMember属性(在设计或代码)使用你的财产(你们称是物业DisplayMember但它的名字是免费,因为它必须指定,它不使用任何约定):

listBox1.DisplayMember = "DisplayMember"; 
+0

完美的谢谢。 – SJP

+0

@SJP欢迎您 –

0

试试这个它应该适合你!

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