我有一个wxListBox,它的构造如下:

wxString choices[8] =  {"0", "1", "2", "3", "4", "5", "6", "7" };

m_listboxSorted = new wxListBox( panelOne, ListBoxOneID,wxPoint(40,250), wxSize(260,125), 8, choices, wxLB_SINGLE|wxLB_HSCROLL, wxDefaultValidator );


这种初始化为列表中的8个预定义条目腾出了空间。但是添加任何多余的(9th ...)都会导致崩溃。

如果我希望使用这8个预定义的条目来初始化列表,但又有可能添加第9位,第10位...,那么该如何纠正该代码呢?

编辑:一些额外的代码,希望可以帮助发现问题

static unsigned int k = 0 ;
m_listboxSorted->SetString(k, "some text");
k++;


此代码是处理程序功能的一部分,该功能(单击按钮时)进行一些处理,并且还会在列表框中添加一个条目。除了构造函数:

wxListBox *m_listboxSorted = new wxListBox;


那就是我看到的所有与列表框有关的代码。

最佳答案

您不能使用SetString()将字符串添加到列表框中,只能将其用于修改现有字符串(考虑一下:SetString(10, "whatever")对一个空列表框会做什么,第一个显示第11行中的字符串"whatever"之前有10个项目?)。

您应该改为使用Append()。这也使您无需手动跟踪索引(当然,始终可以使用GetCount()从列表框本身获取索引)。

10-08 16:41