显示列表框项目的指定文本

时间:2014-08-05 11:18:03

标签: c# winforms list listbox

我有一个包含自定义对象的列表。这些对象具有不同的属性,我有~100个。我想在列表框中创建它们的列表,但列表框仅显示

  MyNamespace.MyClass
  MyNamespace.MyClass
  MyNamespace.MyClass
  MyNamespace.MyClass
  ...

是否可以使列表框为每个项目显示特定值?让我们说我的对象有一个ID字符串值。我可以在不丢弃对象的其他属性的情况下显示每个项目的ID吗?

我目前以这种方式填写列表框:

  lbox.Items.Clear();
  lbox.Items.AddRange(list.ToArray());

4 个答案:

答案 0 :(得分:3)

让我们说你的MyClass看起来像这样:

public class MyClass
{
    public int Id { get; set; }
}

有两种选择。

  1. 您可以使用DataBinding。

    DisplayMember设置为您要显示的MyClass的属性

    lbox.DisplayMember = "Id";
    

    使用DataSource

    ListBox属性设置项目
    lbox.DataSource = list.ToArray();
    
  2. 您可以简单地覆盖ToString对象的MyClass方法,并返回您想要显示的文字。

    覆盖MyClass的ToString方法

    public class MyClass
    {
        public int Id { get; set; }
    
        public override string ToString()
        {
            return Id.ToString();
        }
    }
    

    以与您提到的相同方式设置项目

    lbox.Items.AddRange(list.ToArray());
    
  3. 更多信息

答案 1 :(得分:3)

DisplayMember设置为您希望用户查看的班级属性。

lbox.Items.Clear();
lbox.Items.AddRange(list.ToArray());

lbox.DisplayMember = "ID";  // ID is a public property in MyClass

答案 2 :(得分:1)

尝试使用Linq。

lbox.Items.AddRange(list.Select(x => x.ID).ToArray());

ID是具有您想要显示的值的属性。

您也可以在课程中覆盖ToString()

答案 3 :(得分:1)

在不丢弃对象的情况下,可以将对象附加到标记之后。

list.ToList().ForEach(item => lbox.Items.Add(new ListItem(item.ID){Tag = item});

然后撤回它:

var myitem = ((ListItem)lbox.SelectedItem).Tag as MyClass;