c#如何将对象添加到列表框但显示字符串

时间:2016-08-12 15:56:39

标签: c# listbox

我知道我的问题可能已被提出,但没有给出答案对我有用。 我有一个名为“Item”的类,我想将项目添加到我的列表框中,但字符串显示为myItem.name。 我在这个问题上尝试了建议的解决方案 c# add object to listbox and show string of object in it 这是:

listBox.DisplayMember = myItem.name;
listBox.ValueMember = myItem.id;
listBox.Items.Add(myItem);

但它一直显示namespace.Item而不是项目的名称。

我还在MouseClick上添加了MouseEventHandler,如何在listBox_MouseClick函数中获取所选项目 任何想法请!!!

我的班级代码:

class Item
{
    public string name;
    public Item parent;
    public List<Item> sons = new List<Item>();
    public int depth = 0;
    public int id = 0;

    private static int nextID = 0;

    public Item()
    {

    }

    public Item(string Path)
    {
        this.name = Path;
        this.parent = null;
        this.sons.Clear();
        this.depth = 0;
        this.id = nextID;
        nextID++;
    }

    public Item(Item Parent, string Path, int Depth)
    {
        this.parent = Parent;
        this.name = Path;
        this.sons.Clear();
        this.depth = Depth;
        this.id = nextID;
        nextID++;
    }

    public bool isRoot()
    {
        bool root = false;
        if (this.parent == null)
            root = true;
        return root;
    }

    public bool isFile()
    {
        bool file = false;
        if (this.sons.Count == 0)
            file = true;
        return file;
    }
}

3 个答案:

答案 0 :(得分:2)

在C#6中你可以这样做

listBox.DisplayMember = nameof( myItem.name);
listBox.ValueMember =nameof( myItem.id);

<强>更新

如果不使用

listBox.DisplayMember =  "name;
listBox.ValueMember ="id";

同时绑定您的数据,而不是逐个添加它们,如下所示:

listBox.DataSource = myList;
listBox.Databound();

更新2

如果您不想使用数据源,则必须像这样逐个添加数据。你与显示成员等无关:

listBox.Add(new ListBoxItem(myItem.Name,myIten.Id.ToString()));

答案 1 :(得分:1)

您应该使用字段名称,而不是字段值

listBox.DisplayMember = "name";

同样适用于id

listBox.ValueMember = "id";

答案 2 :(得分:1)

您必须覆盖ToString类中的Item方法,才能使ListBox显示您想要的内容。因为它使用类的默认ToString方法来显示您看到的内容。

试试这个:

public override string ToString()
{
    // choose any format that suits you and display what you like
    return String.Format("Name: {0}", this.name);
} 

并使用您的常规方法

或使用绑定将您的商品引入ListBox。您的商品

需要List
List<Item> itemList = new List<Item>();
// populate it with you items and in the end
// bind it to the data source
this.listBox1.DataSource = itemList;

在任何情况下,您都必须覆盖ToString方法。

如果您想更改itemList请勿忘记刷新ListBox

listBox1.Refresh();
listBox1.Update();