【发布时间】:2018-12-03 20:42:33
【问题描述】:
我有一个列表框,里面有我想要的信息。但是,当用户在特定行上进行选择时,我需要发送一个数字。
列表框数据:
Test1
Test2
Test3
例如,当我在列表中选择 Test1 时,我需要返回整数 2。我问是否无论如何我可以将数字 2 分配给与"Test2" 相关联
listbox.Items.Add("Name displayed on list", value);
【问题讨论】:
我有一个列表框,里面有我想要的信息。但是,当用户在特定行上进行选择时,我需要发送一个数字。
列表框数据:
Test1
Test2
Test3
例如,当我在列表中选择 Test1 时,我需要返回整数 2。我问是否无论如何我可以将数字 2 分配给与"Test2" 相关联
listbox.Items.Add("Name displayed on list", value);
【问题讨论】:
是的,ListBox Items 的类型是object,你可以为它们分配任何对象,所以构建一个这样的类:
public class ListItem
{
public string Name {get; set;}
public int Value {get; set;}
public override string ToString()
{
return Name;
}
}
现在您可以像这样添加 ListBox 项:
listbox.Items.Add(new ListItem { Name = "Test1", Value = 2});
当一个列表框项目被选中时,你可以得到它的值:
var value = ((ListItem)listbox.SelectedItem).Value;
请注意,由于 ListBox 使用其 Items .ToString() 方法来创建要显示的文本,因此您必须像这样覆盖它的 ToString() 方法:
public override string ToString()
{
return Name;
}
否则它将显示类的名称而不是您想要的值。
【讨论】:
DisplayMember 和ValueMember 非常有用的情况之一。您可以设置listbox.DisplayMember = "Name"; listbox.ValueMember = "Value";,而不是覆盖ToString()。 visual 部分的结果相同,但您还可以通过 SelectedValue 属性直接使用每个对象 Value。
ListBox.Items文本,与原始文本完全不同(例如多语言环境中使用的一种方法)。
如前所述,您可以指定listBox 的DataSource,然后您可以方便地使用ListBox 类的SelectedValue。但在此之前还必须指定列表框的ValueMember 和DisplayMember。
在我看来,最方便的是将Tuple<string, int> 对象添加到您的列表框中,并将ValueMember 设置为"Item2" 和DisplayMember 到"Item1",因为Item1 将成为我们的字符串Test1 和Item2 将是整数值。
代码示例:
listBox1.ValueMember = "Item2";
listBox1.DisplayMember = "Item1";
listBox1.DataSource = new Tuple<string, int>[] {
new Tuple<string, int>("Test1", 1),
new Tuple<string, int>("Test2", 2)
};
现在,您可以在代码中使用listBox1.SelectedValue 来访问所选项目的整数值。
【讨论】: