【问题标题】:Can't catch EVT_LIST_BEGIN_LABEL_EDIT event when calling wxListCtrl::EditLabel (index)调用 wxListCtrl::EditLabel (index) 时无法捕获 EVT_LIST_BEGIN_LABEL_EDIT 事件
【发布时间】:2012-08-04 19:27:33
【问题描述】:

我想重命名 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)

我可能错过了一些非常琐碎的事情,但似乎无法弄清楚。有什么想法吗?

干杯, 维利乌斯

【问题讨论】:

    标签: c++ user-interface windows-7 event-handling wxwidgets


    【解决方案1】:

    在创建 wxListCtrl 实例时必须添加 wxLC_EDIT_LABELS 样式以启用标签编辑,这会触发事件 EVT_LIST_BEGIN_LABEL_EDIT 和 EVT_LIST_END_LABEL_EDIT。

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 2017-05-02
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      相关资源
      最近更新 更多