如何显示ListBox中对象的ToString?

时间:2013-03-27 19:21:36

标签: visual-c++ c++-cli

我有一个类,它包含我想要显示的字符串以及该项目的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方法时生成的字符串。

1 个答案:

答案 0 :(得分:2)

你没有说你是使用WinForms还是WPF,但我相信这个答案对任何一个都有效。

(注意:框架中有一个名为ListBoxItem的类。您可能想要选择不同的类名。)

我相信问题在这里:

virtual String ^ ToString() new { return name; }
                            ^^^

这意味着您正在创建一个全新的ToString方法,该方法与Object.ToString方法没有任何关系。当ListBox调用ToString时,它没有您的类定义,因此它只调用您没有更改的Object.ToString()。

切换到这个,你应该很好:

virtual String ^ ToString() override { return name; }
                            ^^^^^^^^