2

我创建了一个 wxGrid,用数据填充它,并创建了一个包含复选框的列,并使它们可编辑。到目前为止一切都很好。

co_Grid->SetReadOnly(at_RowCount, 24, false);    
co_Grid->SetCellRenderer(at_RowCount, 24,  new wxGridCellBoolRenderer); 
co_Grid->SetCellEditor(at_RowCount, 24, new wxGridCellBoolEditor);

我现在想要做的是为复选框切换事件添加一个事件处理程序。

我已经尝试将OnCellValueChanged事件用于网格,但只有在用户离开单元格后才会触发,因为在此之前编辑器仍然打开(并且单元格实际上还没有改变)

我很确定我需要为它创建一个事件处理程序,wxGridCellBoolEditor但这就是我苦苦挣扎的地方。

我尝试在事件中连接一个事件OnEditorShown,但这并不顺利(当我单击单元格打开编辑器时出现未处理的异常):

void cTeamGrid::OnEditorShown( wxGridEvent& ev )
{
    int row = ev.GetRow(),
        col = ev.GetCol();

    co_Grid->GetCellEditor(row, col)->GetControl()->Connect(wxEVT_COMMAND_CHECKBOX_CLICKED, 
        wxCommandEventHandler(cTeamGrid::OnGridCheckChange), NULL, this);
}

我究竟做错了什么?

4

1 回答 1

0

我自己也有类似的问题。我通过将复选框列设置为只读并让 wxGrid 控件手动处理单击事件以切换复选框状态来绕过它(您还必须管理双击)。这种方法不是最正统的,也是因为现在每次点击单元格,而不是复选框,都会改变状态。然而,在我看来,这也可能是一种可取的行为。此外,这使您可以让用户使用键盘更改复选框(通过捕获 KeyPress 事件)。

于 2015-04-11T22:16:37.497 回答