我无法弄清楚如何ListBox
在WinForms中添加项目.
我试过了:
list.DisplayMember = "clan"; list.ValueMember = sifOsoba;
如何ValueMember
使用int
值和一些文本添加到列表中DisplayMember
?
list.Items.add(?)
顺便说一句.我不能ListBoxItem
出于任何原因使用.
ListBoxItem是一个WPF类,而不是WinForms类.
对于WPF,请使用ListBoxItem.
对于WinForms,该项是Object类型,因此请使用以下方法之一:
1.为Object类型提供自己的ToString()方法.
2.使用DisplayMemeber和ValueMember数据绑定(参见Kelsey的答案)
list.Items.add(new ListBoxItem("name", "value"));
ListBox的内部(默认)数据结构是ListBoxItem.
在的WinForms,ValueMember
而DisplayMember
当数据绑定列表中被使用.如果您不是数据绑定,那么您可以添加任意对象作为ListItem
.
要抓住的是,为了显示该项目,ToString()
将在其上进行调用.因此,强烈建议您只将对象添加到ListBox,其中调用ToString()
将导致有意义的输出.
您可能想要查看此SO问题:
C# - WinForms - 加载ListBox的正确方法是什么?
DisplayMember和ValueMember主要仅在您对已定义这些属性的对象进行数据绑定时才有用.然后,您需要添加该对象的实例.
例如:
public class MyObject { public string clan { get; set; } public int sifOsoba { get; set; } public MyObject(string aClan, int aSif0soba) { this.clan = aClan; this.sif0soba = aSif0soba; } public override string ToString() { return this.clan; } } .... list.Items.Add(new MyObject("hello", 5));
如果您手动绑定它,则可以使用护目镜提供的示例
我这样做的方式 - 使用格式事件
MyClass c = new MyClass(); listBox1.Items.Add(c); private void listBox1_Format(object sender, ListControlConvertEventArgs e) { if(e.ListItem is MyClass) { e.Value = ((MyClass)e.ListItem).ToString(); } else { e.Value = "Unknown item added"; } }
e.Value是显示文本
然后,您可以尝试将SelectedItem强制转换为MyClass,以访问您在那里拥有的任何内容.
另请注意,您可以在Items Collection中使用任何(从对象继承(几乎所有东西)).