如何为wxGrid单元格创建Checkbox Change事件

时间:2013-11-18 12:34:34

标签: c++ checkbox event-handling wxgrid

我创建了一个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事件用于网格,但仅在用户离开单元格后触发,因为在此之前编辑器仍处于打开状态(并且单元格尚未实际更改)< / p>

我很确定我需要为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);
}

我做错了什么?

1 个答案:

答案 0 :(得分:0)

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