如何显示的对象,其在列表框的的ToString?
问题描述:
我有持有我想要显示的字符串,该项目的ID类。如何显示的对象,其在列表框的的ToString?
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; }
};
而且我每个项目添加到列表框是这样的:
for(list<string>::iterator i = listItems.begin(); i != listItems.end(); i++)
listBoxItems->Items->Add(gcnew ListBoxItem(2, (*i).c_str()));
这将产生正确数量项目的ListBox
,但所有的项目被称为“ListBoxItem的”。
取而代之,我想让ListBox
显示在ListBoxItem
上调用ToString
方法时产生的字符串。
答
你没有说你是否使用的WinForms或WPF,但我相信这个答案是有效期为。
(注:有一个框架中的命名ListBoxItem类你可能想选择一个不同的类名。)
我相信这个问题是在这里:
virtual String^ToString() new { return name; }
^^^
这意味着你”重新创建一个全新的ToString方法,它没有什么关系的Object.toString方法。当ListBox中调用的ToString,它没有你的类定义,所以它只是调用Object.ToString(),你没有改变。
切换到这一点,你应该是好:
virtual String^ToString() override { return name; }
^^^^^^^^
改变'new'到'override'工作,谢谢! – samwell 2013-03-28 00:51:09