C#:列表框:如何在每个项目的文本之外添加数据
将以下文本视为两个列表(用“:”分隔),因为您可以看到第二行始终是唯一的,但第一行中的项目可能是重复的C#:列表框:如何在每个项目的文本之外添加数据,c#,object,collections,listbox,C#,Object,Collections,Listbox,将以下文本视为两个列表(用“:”分隔),因为您可以看到第二行始终是唯一的,但第一行中的项目可能是重复的 Book:m234 Clover:h67 Pencil:a12 Book:x67 我想用第一列中的项目(Book、Clover等)填充列表框,但问题是,当我要检索列表框中的选定项目时,我无法确定第二列中的相应值。(例如,在“书”的情况下) 注意:我不想寻找任何解决此问题的方法,因为有很多方法。我想知道的是: 是否可以通过对象携带两个值(每列的每个值/属性)的方式将和对象传递到ListBox.
Book:m234
Clover:h67
Pencil:a12
Book:x67
我想用第一列中的项目(Book、Clover等)填充列表框,但问题是,当我要检索列表框中的选定项目时,我无法确定第二列中的相应值。(例如,在“书”的情况下)
注意:我不想寻找任何解决此问题的方法,因为有很多方法。我想知道的是:
是否可以通过对象携带两个值(每列的每个值/属性)的方式将和对象传递到ListBox.Items.Add()
,并且在获取所选项目时,我们将拥有一个具有这两个值的对象(可能作为对象的属性)
这样的事情在C#中可能发生吗?(.NET 4.5)您可以将数据与名称配对的对象传递到
列表框
,并使用DisplayMember
和ValueMember
控制显示的内容和返回给您的内容:
class ListBoxItem {
public string DisplayName {get;set;}
public string Identifier {get;set;}
}
...
ListBox.Items.Add(new ListBoxItem {
DisplayName = "Book", Identifier = "m234"
});
ListBox.Items.Add(new ListBoxItem {
DisplayName = "Clover", Identifier = "h67"
});
ListBox.Items.Add(new ListBoxItem {
DisplayName = "Pencil", Identifier = "a12"
});
ListBox.Items.Add(new ListBoxItem {
DisplayName = "Book", Identifier = "x67"
});
ListBox.DisplayMember = "DisplayName";
ListBox.ValueMember = "Identifier";
现在,您的列表框显示相同的字符串列表,但为最终用户选择返回的值将不同。感谢您的回复。一个问题;假设我想在MessageBox中显示所选项目的“标识符”。show()我应该使用什么代码?@wiki通常你会为自己保留一个小“地图”——比如,使用
标识符作为键的字典listBoxIdMap
。这允许您选择listBoxMap[selectedKey]
项,并显示其任何部分。