我知道我的问题可能已被提出,但没有给出答案对我有用。 我有一个名为“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;
}
}
答案 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();