【问题标题】:How to create a Checkbox Change event for a wxGrid cell如何为 wxGrid 单元格创建 Checkbox Change 事件
【发布时间】:2013-11-18 12:34:33
【问题描述】:

我创建了一个 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);
}

我做错了什么?

【问题讨论】:

    标签: c++ checkbox event-handling wxgrid


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 2012-11-01
      • 1970-01-01
      • 2014-06-23
      • 1970-01-01
      • 2020-07-13
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多