2009-11-13 91 views
19

我很难搞清楚如何将项目添加到WinForms中的ListBox如何将项目添加到ListBox?

我想:

list.DisplayMember = "clan"; 
list.ValueMember = sifOsoba; 

我如何将项目添加到列表中与int值(ValueMember)和一些全文(DisplayMember)?

list.Items.add(?) 

我不能使用ListBoxItem。为什么?

+0

@jmein:谢谢;为了清理原始文章,我错过了csharp标记。 – 2009-11-13 21:39:51

+3

请不要使用接受答案中提供的代码。这是错误的。 monksy建议的类(ListBoxItem)是一个WPF类,它位于WPF程序集(PresentationFramework.dll)中的WPF名称空间(System.Windows.Controls)中。 Windows窗体开发人员不应该在他们的应用程序中引用来自WPF的程序集和类。代码可能会编译并运行,但它不正确。 – MichaelFStarke 2013-04-05 15:03:42

回答

10
list.Items.add(new ListBoxItem("name", "value")); 

ListBox的内部(默认)数据结构是ListBoxItem

+6

listBoxItem?为什么我没有那个? – Ante 2009-11-13 21:49:00

+0

是否有错误?我已经添加了一个链接到类文档 – monksy 2009-11-13 22:10:27

+4

您可以添加一个对象 - 它不必是一个ListBoxItem。 – 2009-11-13 22:12:05

1

你必须创建类型ListBoxItem中的一个项目,并添加到项目集合:

list.Items.add(new ListBoxItem("clan", "sifOsoba")); 
+2

方法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

9

在的WinForms,ValueMemberDisplayMember是当数据绑定列表中。如果你不是数据绑定的,那么你可以添加任意对象作为ListItem

捕捉到的是,为了显示该项目,ToString()将被调用。因此,强烈建议您只将对象添加到列表框,其中调用ToString()将导致有意义的输出。

+0

需要调用ToString()的+1,帮助我一大堆! (我自己的错并不是首先重写toString,我试着为每个类做这个) – Spooks 2011-04-27 18:22:33

5

如果您将数据绑定到具有这些属性定义的对象,则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)); 

如果手动绑定,那么你可以使用眼罩

提供的例子
7
+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 – Trilarion 2015-01-26 15:22:01

+1

@triIarion会同意,如果这不是直接链接回StackOverflow。此外,当没有太多的“最佳实践”发布时,因为SO相对较新(超过5年前),所以这个答案被发回:) – Kelsey 2015-01-26 16:55:40

1

如果您要添加整数,就像您在问题中所说的那样,这将添加50(从1到50):

for (int x = 1; x <= 50; x++) 
{ 
    list.Items.Add(x); 
} 

除非要添加具有要显示给用户的特定属性的对象,否则不需要设置DisplayMember和ValueMember。在您的例子:

listbox1.Items.Add(new { clan = "Foo", sifOsoba = 1234 }); 
+0

由于某些原因,当我将一个字符串添加到我的列表框项目集合中时,列表框仍然为空。还有什么我需要做的,使文本出现? – James 2017-06-21 18:36:12

2

的方式我这样做 - 使用格式事件

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集合中。

24

ListBoxItem是一个WPF类,不是WinForms类。

对于WPF,请使用ListBoxItem。

对于WinForms,该项目是对象类型,因此请使用以下其中之一:
1.为对象类型提供您自己的ToString()方法。
2.用DisplayMemeber和ValueMember(see Kelsey's answer

+0

这是不正确的:http://msdn.microsoft.com/en-us/library/system.windows.controls.listboxitem.aspx – monksy 2013-04-03 18:27:32

+4

@monksy,它怎么不正确?您提供的链接是“Assembly:PresentationFramework(在PresentationFramework.dll中)”,这意味着该类在WPF中定义。一个普通的WinForms应用程序甚至不会引用WPF dll。 – 2013-04-03 18:56:36

+0

我同意@AZ。其实阅读文档使其非常清楚。 – MichaelFStarke 2013-04-04 21:35:35

1

数据绑定如果你只是想将一个字符串添加到它,简单的答案是:

ListBox.Items.Add("some text"); 
相关问题