【问题标题】:Adding a value to a listbox item. C#向列表框项添加值。 C#
【发布时间】:2018-12-03 20:42:33
【问题描述】:

我有一个列表框,里面有我想要的信息。但是,当用户在特定行上进行选择时,我需要发送一个数字。

列表框数据:

Test1
Test2
Test3

例如,当我在列表中选择 Test1 时,我需要返回整数 2。我问是否无论如何我可以将数字 2 分配给与"Test2" 相关联

listbox.Items.Add("Name displayed on list", value);

【问题讨论】:

标签: c# winforms listbox


【解决方案1】:

是的,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;
}

否则它将显示类的名称而不是您想要的值。

【讨论】:

  • 这是 ListBox 控件的DisplayMemberValueMember 非常有用的情况之一。您可以设置listbox.DisplayMember = "Name"; listbox.ValueMember = "Value";,而不是覆盖ToString()visual 部分的结果相同,但您还可以通过 SelectedValue 属性直接使用每个对象 Value
  • 既然涉及到一个类,那么这个类也可以有一个Property用于呈现ListBox.Items文本,与原始文本完全不同(例如多语言环境中使用的一种方法)。
【解决方案2】:

如前所述,您可以指定listBoxDataSource,然后您可以方便地使用ListBox 类的SelectedValue。但在此之前还必须指定列表框的ValueMemberDisplayMember

在我看来,最方便的是将Tuple<string, int> 对象添加到您的列表框中,并将ValueMember 设置为"Item2"DisplayMember"Item1",因为Item1 将成为我们的字符串Test1Item2 将是整数值。

代码示例:

  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 来访问所选项目的整数值。

【讨论】:

  • 是否也选择了多个项目?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多