如何在C#和WinForms中向列表框添加项目?

如何在C#和WinForms中向列表框添加项目?,c#,winforms,C#,Winforms,我在弄清楚如何在WinForms中将项添加到中遇到问题 我试过: list.DisplayMember = "clan"; list.ValueMember = sifOsoba; 如何将ValueMember添加到带有int值和DisplayMember文本的列表中 list.Items.add(?) 顺便说一句,由于任何原因,我都不能使用ListBoxItem 列表框的内部(默认)数据结构为 您必须创建ListBoxItem类型的项,并将其添加到Items集合: list.Items.a

我在弄清楚如何在WinForms中将项添加到中遇到问题

我试过:

list.DisplayMember = "clan";
list.ValueMember = sifOsoba;
如何将
ValueMember
添加到带有
int
值和
DisplayMember
文本的列表中

list.Items.add(?)
顺便说一句,由于任何原因,我都不能使用
ListBoxItem


列表框的内部(默认)数据结构为

您必须创建ListBoxItem类型的项,并将其添加到Items集合:

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

在WinForms中,数据绑定列表时使用
ValueMember
DisplayMember
。如果不进行数据绑定,则可以将任意对象添加为
列表项


需要注意的是,为了显示该项,将对其调用
ToString()
。因此,强烈建议您仅将对象添加到列表框中,在该列表框中调用
ToString()
将产生有意义的输出。

DisplayMember和ValueMember仅在数据绑定到定义了这些属性的对象时才最有用。然后需要添加该对象的实例

e、 g:


如果您手动绑定,那么您可以使用goggles提供的示例,您可能需要检查此问题:


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


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

  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、 作为显示文本的值

然后,您可以尝试将SelectedItem强制转换为MyClass,以访问其中的任何内容。

还要注意的是,您可以在Items集合中使用任何东西(从object继承的东西(几乎就是所有东西)。

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

对于WPF,使用ListBoxItem

对于WinForms,该项是对象类型,因此请使用以下选项之一:
1.为对象类型提供您自己的ToString()方法。

2.将数据绑定与DisplayMemeber和ValueMember()一起使用。

如果您只想向其中添加一个字符串,简单的答案是:

ListBox.Items.Add("some text");

@杰曼:谢谢;在清理原始帖子的过程中,我错过了csharp标签。请不要使用接受答案中提供的代码。这是错误的。monksy建议的类(ListBoxItem)是一个WPF类,它位于WPF程序集(PresentationFramework.dll)中的WPF命名空间(System.Windows.Controls)中。Windows窗体开发人员不应在其应用程序中引用WPF中的程序集和类。代码可以编译并运行,但不正确。listBoxItem?为什么我没有呢?你可以添加一个对象-它不必是ListBoxItem。这不是正确的答案。问题被标记为winforms,ListBoxItem是一个WPF类。@monksy:看看你链接到的页面。。。它声明该类位于作为WPF程序集的程序集PresentationFramework(在PresentationFramework.dll中)中。不要介意System.Windows.Controls是WPF命名空间这一事实。winforms控件位于System.Windows.Forms名称空间中。这个答案确实是错误的,Windows窗体库中没有ListBoxItem类,只有使用WPF,下面的答案是正确的+1 for ToString()需要调用,帮了我大忙!(我自己的错误是没有首先重写toString,我尝试对每个类都这样做)方法ListBox.Items.Add()接受一个对象ListBoxItem似乎只作为一个wpf控件存在,因为问题是关于winforms()的。我假设上面的方法只对wpf ListBox有效。这是不正确的:@monksy,这怎么不正确呢?您提供的链接显示为
Assembly:PresentationFramework(在PresentationFramework.dll中)
,这意味着该类是在WPF中定义的。普通的WinForms应用程序甚至不会引用WPF dll。我同意@AZ。实际上,阅读文档可以使问题变得非常清楚。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,则“仅链接”答案可能无效。@如果不是直接链接回StackOverflow,triIarion会同意。同样,这个答案是在没有太多“最佳实践”的时候发布的,因为这是相对较新的(5年前):)由于某种原因,当我向我的listbox项目集合添加字符串时,listbox仍然为空。我还需要做些什么来显示文本?我发现这个解决方案非常有用,因为我通常需要在组合框/列表框控件中显示一个键/值。谢谢
for (int x = 1; x <= 50; x++)
{
   list.Items.Add(x);
}
listbox1.Items.Add(new { clan = "Foo", sifOsoba = 1234 });
  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";
        }
    }
ListBox.Items.Add("some text");