我有一个包含自定义对象的列表。这些对象具有不同的属性,我有~100个。我想在列表框中创建它们的列表,但列表框仅显示
MyNamespace.MyClass
MyNamespace.MyClass
MyNamespace.MyClass
MyNamespace.MyClass
...
是否可以使列表框为每个项目显示特定值?让我们说我的对象有一个ID字符串值。我可以在不丢弃对象的其他属性的情况下显示每个项目的ID吗?
我目前以这种方式填写列表框:
lbox.Items.Clear();
lbox.Items.AddRange(list.ToArray());
答案 0 :(得分:3)
让我们说你的MyClass看起来像这样:
public class MyClass
{
public int Id { get; set; }
}
有两种选择。
您可以使用DataBinding。
将DisplayMember
设置为您要显示的MyClass的属性
lbox.DisplayMember = "Id";
使用DataSource
ListBox
属性设置项目
lbox.DataSource = list.ToArray();
您可以简单地覆盖ToString
对象的MyClass
方法,并返回您想要显示的文字。
覆盖MyClass的ToString
方法
public class MyClass
{
public int Id { get; set; }
public override string ToString()
{
return Id.ToString();
}
}
以与您提到的相同方式设置项目
lbox.Items.AddRange(list.ToArray());
答案 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;