如何在C#和WinForms中将项添加到ListBox?

Ant*_*nte 29 c# winforms

我无法弄清楚如何ListBox在WinForms中添加项目.

我试过了:

list.DisplayMember = "clan";
list.ValueMember = sifOsoba;
Run Code Online (Sandbox Code Playgroud)

如何ValueMember使用int值和一些文本添加到列表中DisplayMember

list.Items.add(?)
Run Code Online (Sandbox Code Playgroud)

顺便说一句.我不能ListBoxItem出于任何原因使用.

AZ.*_*AZ. 30

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

对于WPF,请使用ListBoxItem.

对于WinForms,该项是Object类型,因此请使用以下方法之一:
1.为Object类型提供自己的ToString()方法.
2.使用DisplayMemeber和ValueMember数据绑定(参见Kelsey的答案)

  • @monksy,怎么回事不对?你提供的链接是`Assembly:PresentationFramework(在PresentationFramework.dll中)`,这意味着该类是在WPF中定义的.一个普通的WinForms应用程序甚至不会引用WPF dll. (4认同)

mon*_*ksy 14

list.Items.add(new ListBoxItem("name", "value"));
Run Code Online (Sandbox Code Playgroud)

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

  • 这不是正确的答案.问题是标记为winforms,ListBoxItem是WPF类. (61认同)
  • 这个答案确实是错误的,Windows窗体库中没有ListBoxItem类,只有WPF,下面的答案是对的 (9认同)
  • ListBoxItem的?为什么我没有那个? (6认同)
  • @monksy:查看你链接到的页面...它声明该类存在于程序集PresentationFramework(在PresentationFramework.dll中),这是一个WPF程序集.不要紧,System.Windows.Controls是一个WPF命名空间.winforms的控件存在于System.Windows.Forms命名空间中. (6认同)
  • 您只需添加一个对象 - 它不必是ListBoxItem. (5认同)
  • 好的.还原我的编辑,但这个答案仍然是错误的. (4认同)

Joh*_*udy 9

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

要抓住的是,为了显示该项目,ToString()将在其上进行调用.因此,强烈建议您只将对象添加到ListBox,其中调用ToString()将导致有意义的输出.


zin*_*orp 6

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));
Run Code Online (Sandbox Code Playgroud)

如果您手动绑定它,则可以使用护目镜提供的示例


Pos*_*Man 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";
        }
    }
Run Code Online (Sandbox Code Playgroud)

e.Value是显示文本

然后,您可以尝试将SelectedItem强制转换为MyClass,以访问您在那里拥有的任何内容.
另请注意,您可以在Items Collection中使用任何(从对象继承(几乎所有东西)).


net*_*fed 5

如果你只想给它添加一个字符串,简单的答案是:

ListBox.Items.Add("some text");
Run Code Online (Sandbox Code Playgroud)