当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在C#和WinForms中将项添加到ListBox?》经验,为你挑选了6个好方法。

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

我试过了:

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

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

list.Items.add(?)

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



1> AZ...:

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

对于WPF,请使用ListBoxItem.

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


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

2> monksy..:
list.Items.add(new ListBoxItem("name", "value"));

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


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

3> John Rudy..:

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

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



4> Kelsey..:

您可能想要查看此SO问题:

C# - WinForms - 加载ListBox的正确方法是什么?



5> zincorp..:

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));

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



6> PostMan..:

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

  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中使用任何(从对象继承(几乎所有东西)).

推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有