我想在wxListCtrl中重命名选定的列表项。我一直在遵循 wxwidgets 提供的示例 listctrl 示例,但它似乎在我的代码中不起作用。
该示例包含以下代码段,用于调用更改项的标签:
void MyFrame::OnEdit(wxCommandEvent& WXUNUSED(event))
{
// demonstrate cancelling editing: this currently is wxMSW-only
#ifdef __WXMSW__
if ( m_listCtrl->GetEditControl() )
{
m_listCtrl->EndEditLabel(true);
}
else // start editing
#endif // __WXMSW__
{
long itemCur = m_listCtrl->GetNextItem(-1, wxLIST_NEXT_ALL,
wxLIST_STATE_FOCUSED);
if ( itemCur != -1 )
{
m_listCtrl->EditLabel(itemCur);
}
else
{
m_logWindow->WriteText(wxT("No item to edit"));
}
}
}
而我的看起来像这样:
void GUI::OnRename (wxCommandEvent &WXUNUSED (event))
{
wxListCtrl *list ((wxListCtrl*) this -> FindWindowById (ID_LIST));
int index = list -> GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
if (list -> GetEditControl ())
list->EndEditLabel(true);
else if (index != -1)
{
list -> EditLabel (index);
}
}
这两段代码都调用 EditLabel 函数,其中应触发用于编辑标签 (wxEVT_LIST_BEGIN_LABEL_EDIT) 的事件,但是我的代码中的绑定方法不会被触发,而示例中的代码确实被触发。
我在事件表中绑定方法的方式与示例中的方法相同:EVT_LIST_BEGIN_LABEL_EDIT (ID_LIST, GUI::OnEditListLabel)
示例:EVT_LIST_BEGIN_LABEL_EDIT(LIST_CTRL,MyListCtrl::OnBeginLabelEdit)
我可能错过了一些非常琐碎的事情,但似乎无法弄清楚。有什么想法吗?
干杯维利乌斯
创建 wxListCtrl 实例时必须添加wxLC_EDIT_LABELS样式,以启用标签的编辑,从而触发事件EVT_LIST_BEGIN_LABEL_EDIT和EVT_LIST_END_LABEL_EDIT。