0

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)

私はおそらく非常に些細なことを見逃していますが、それを理解できないようです。何か案は?

乾杯、ヴィリウス

4

1 に答える 1

0

wxListCtrlのインスタンスを作成するときにwxLC_EDIT_LABELSスタイルを追加して、イベントEVT_LIST_BEGIN_LABEL_EDITおよびEVT_LIST_END_LABEL_EDITをトリガーするラベルの編集を有効にする必要があります。

于 2012-08-05T10:50:49.387 に答える