我正在使用 wxWidgets 3.1.0,并且正在用 C++ 开发一个 Windows 应用程序。
我正在使用基础wxGrid,并且通过用鼠标拖动它们启用了列重新排序(EnableDragColMove(true))。我现在的问题是,在将列拖到新位置后,我需要获取移动列的新位置/索引。
不幸的是,我无法从可用的 API 中找到一种方法。
我尝试捕获wxGridEvent wxEVT_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()仍将返回当前列索引,而不是新索引。
移动列后似乎没有事件可以捕获。
我目前的解决方案/解决方法是:
在捕获wxEVT_GRID_COL_MOVE事件后手动处理列移动(如 wxWidgets 文档中所建议),以便我可以正确跟踪移动列的前后索引。
在列移动到其新位置后手动触发回调或计时器事件,类似于另一篇 SO 帖子中建议的 wxPython 解决方法。
不过,我想知道是否有一种更清洁、更简单的方法,而无需求助于上述解决方法。
任何建议表示赞赏。