我有一个类,它包含我想要显示的字符串以及该项目的ID。
ref class ListBoxItem {
private:
int id;
String ^ name;
public:
ListBoxItem(int id, const char * name) { this->id = id; this->name = gcnew System::String(name); }
virtual String ^ ToString() new { return name; }
};
我将每个项目添加到ListBox中:
for(list<string>::iterator i = listItems.begin(); i != listItems.end(); i++)
listBoxItems->Items->Add(gcnew ListBoxItem(2, (*i).c_str()));
这将生成具有正确数量的项目的ListBox
,但所有项目都称为“ListBoxItem”。
相反,我希望ListBox
显示在ToString
上调用ListBoxItem
方法时生成的字符串。
答案 0 :(得分:2)
你没有说你是使用WinForms还是WPF,但我相信这个答案对任何一个都有效。
(注意:框架中有一个名为ListBoxItem的类。您可能想要选择不同的类名。)
我相信问题在这里:
virtual String ^ ToString() new { return name; }
^^^
这意味着您正在创建一个全新的ToString方法,该方法与Object.ToString方法没有任何关系。当ListBox调用ToString时,它没有您的类定义,因此它只调用您没有更改的Object.ToString()。
切换到这个,你应该很好:
virtual String ^ ToString() override { return name; }
^^^^^^^^