0

我有一个类,其中包含我要显示的字符串和该项目的 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时生成的字符串。ToStringListBoxItem

4

1 回答 1

2

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

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

我相信问题在这里:

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

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

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

virtual String ^ ToString() override { return name; }
                            ^^^^^^^^
于 2013-03-27T21:58:38.950 回答