Я использую wxWidgets 3.1.0, и я разрабатываю приложение Windows на C++.Как получить новый индекс перемещенного столбца в wxGrid?
Я использую базу wxGrid, и я включил переупорядочение столбцов, перетащив их с помощью мыши (EnableDragColMove(true)). Моя проблема теперь в том, что мне нужно получить новую позицию/индекс перемещенного столбца после, столбец был перетащен на новое место.
К сожалению, я не смог найти способ сделать это из доступных API.
Я попытался поймать wxGridEventwxEVT_GRID_COL_MOVE затем с помощью GetCol() и GetColPos(), чтобы проверить новый индекс столбца:
gridDataList->Bind(wxEVT_GRID_COL_MOVE, &FormData::OnList_ColumnMove, this);
...
void FormData::OnList_ColumnMove(wxGridEvent& event)
{
int movedCol = event.GetCol();
int movedColPos = gridDataList->GetColPos(movedCol);
...
}
Но, похоже, это событие срабатывает ДО столбец фактически перемещается, так GetColPos() по-прежнему будет возвращать текущий индекс столбца, NOT новый индекс.
Похоже, что нет события для улова ПОСЛЕ того, как столбец перемещается.
Мои текущие решения/обходные являются:
вручную обрабатывать движение колонки после ловли wxEVT_GRID_COL_MOVE событие (как это было предложено в документации WxWidgets), так что я могу правильно отслеживать до и после индекс перемещенного столбца.
Вручную вызовите обратный вызов или событие таймера после того, как столбец переместится в новое положение, аналогично обходному решению wxPython, предложенному в another SO post.
Хотя, я хотел бы знать, есть ли более чистый, менее сложный способ, не прибегая к обходным решениям выше.
Любые предложения приветствуются.
Как о 'EVT_HEADER_BEGIN_REORDER (ID, Func) и' EVT_HEADER_END_REORDER (ID, FUNC) ' – macroland
@macroland Я попробовал их, но [wxHeaderCtrl] (http://docs.wxwidgets.org/3.1.0/classwx_header_ctrl.html) события не запускаются. Я попытался привязать + ухватить их в моем коде wxGrid (подобно wxEVT_GRID_COL_MOVE), а также в пользовательской реализации wxGrid. –