我很难搞清楚如何将项目添加到WinForms中的ListBox
。如何将项目添加到ListBox?
我想:
list.DisplayMember = "clan";
list.ValueMember = sifOsoba;
我如何将项目添加到列表中与int
值(ValueMember
)和一些全文(DisplayMember
)?
list.Items.add(?)
我不能使用ListBoxItem
。为什么?
我很难搞清楚如何将项目添加到WinForms中的ListBox
。如何将项目添加到ListBox?
我想:
list.DisplayMember = "clan";
list.ValueMember = sifOsoba;
我如何将项目添加到列表中与int
值(ValueMember
)和一些全文(DisplayMember
)?
list.Items.add(?)
我不能使用ListBoxItem
。为什么?
list.Items.add(new ListBoxItem("name", "value"));
ListBox的内部(默认)数据结构是ListBoxItem。
你必须创建类型ListBoxItem中的一个项目,并添加到项目集合:
list.Items.add(new ListBoxItem("clan", "sifOsoba"));
方法ListBox.Items.Add()需要一个对象http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.objectcollection.add(v=vs.100).aspx ListBoxItem似乎只能作为wpf控件存在http://msdn.microsoft.com/en-us/library/system.windows.controls.listboxitem.aspx 由于问题是关于winforms(http://msdn.microsoft.com/zh-cn/library/default.aspx)。 com/en-us/library/system.windows.forms.listbox(v = vs.100).aspx)我假设你的方法仅对wpf ListBox有效。 – surfmuggle 2013-02-12 23:55:50
在的WinForms,ValueMember
和DisplayMember
是当数据绑定列表中。如果你不是数据绑定的,那么你可以添加任意对象作为ListItem
。
捕捉到的是,为了显示该项目,ToString()
将被调用。因此,强烈建议您只将对象添加到列表框,其中调用ToString()
将导致有意义的输出。
需要调用ToString()的+1,帮助我一大堆! (我自己的错并不是首先重写toString,我试着为每个类做这个) – Spooks 2011-04-27 18:22:33
如果您将数据绑定到具有这些属性定义的对象,则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));
如果手动绑定,那么你可以使用眼罩
提供的例子如果您要添加整数,就像您在问题中所说的那样,这将添加50(从1到50):
for (int x = 1; x <= 50; x++)
{
list.Items.Add(x);
}
除非要添加具有要显示给用户的特定属性的对象,否则不需要设置DisplayMember和ValueMember。在您的例子:
listbox1.Items.Add(new { clan = "Foo", sifOsoba = 1234 });
由于某些原因,当我将一个字符串添加到我的列表框项目集合中时,列表框仍然为空。还有什么我需要做的,使文本出现? – James 2017-06-21 18:36:12
的方式我这样做 - 使用格式事件
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集合中。
ListBoxItem是一个WPF类,不是WinForms类。
对于WPF,请使用ListBoxItem。
对于WinForms,该项目是对象类型,因此请使用以下其中之一:
1.为对象类型提供您自己的ToString()方法。
2.用DisplayMemeber和ValueMember(see Kelsey's answer)
这是不正确的:http://msdn.microsoft.com/en-us/library/system.windows.controls.listboxitem.aspx – monksy 2013-04-03 18:27:32
@monksy,它怎么不正确?您提供的链接是“Assembly:PresentationFramework(在PresentationFramework.dll中)”,这意味着该类在WPF中定义。一个普通的WinForms应用程序甚至不会引用WPF dll。 – 2013-04-03 18:56:36
我同意@AZ。其实阅读文档使其非常清楚。 – MichaelFStarke 2013-04-04 21:35:35
数据绑定如果你只是想将一个字符串添加到它,简单的答案是:
ListBox.Items.Add("some text");
@jmein:谢谢;为了清理原始文章,我错过了csharp标记。 – 2009-11-13 21:39:51
请不要使用接受答案中提供的代码。这是错误的。 monksy建议的类(ListBoxItem)是一个WPF类,它位于WPF程序集(PresentationFramework.dll)中的WPF名称空间(System.Windows.Controls)中。 Windows窗体开发人员不应该在他们的应用程序中引用来自WPF的程序集和类。代码可能会编译并运行,但它不正确。 – MichaelFStarke 2013-04-05 15:03:42