2013-03-27 47 views
0

我有持有我想要显示的字符串,该项目的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方法时产生的字符串。

回答

2

你没有说你是否使用的WinForms或WPF,但我相信这个答案是有效期为。

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

我相信这个问题是在这里:

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

这意味着你”重新创建一个全新的ToString方法,它没有什么关系的Object.toString方法。当ListBox中调用的ToString,它没有你的类定义,所以它只是调用Object.ToString(),你没有改变。

切换到这一点,你应该是好:

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

改变'new'到'override'工作,谢谢! – samwell 2013-03-28 00:51:09

相关问题