显示WXGRID编辑器时如何捕获关键因素

How to catch KeyEvents when wxGrid Editor is Shown

本文关键字:何捕获 WXGRID 编辑器 显示      更新时间:2023-10-16

在WXGRID中的单元格中键入时,箭头键在字符之间向后移动。但是,根据钟表位置,我想在按下箭头键时将光标移至下一个单元格。当前,WXGRID被配置为捕获Enter键,这使得光标可以向下移动(到下面的单元格)。我的问题是,在显示编辑器时,我该如何捕获KeyEvent。

我的方法:

void Grid::OnGridCmdEditorShown( wxGridEvent& event )
{
    m_IsEditorShown=true;
    //Connect(wxEVT_KEY_DOWN,wxKeyEventHandler(Grid::OnKeyDown),NULL, this); //This approach did not help either
    event.Skip();
}
void Grid::OnKeyDown(wxKeyEvent& event)
{
    if(m_IsEditorShown) wxMessageBox("You are keying");
    event.Skip();
}

显示编辑器并说我将abc键入当前单元格时,仅在我按Enter时才会出现消息框。当仍显示编辑器时,如何捕获关键因素,例如,显示了当前单元格的用户类型a,并且显示了消息框。

您需要使用自定义编辑器(可能只是从标准wxGridCellTextEditor派生),并绑定到其Create()中创建的编辑控件的wxEVT_CHAR事件。

请注意,如果要处理初始键按,这首先会显示编辑器,则需要覆盖wxGridCellEditor::StartingKey(),因为此密钥按下在显示编辑控件之前发生的。

<。

通过将其添加到 Grid构造函数来创建后,对我有用的一种方法是将处理程序连接到每个网格编辑器:

Bind(wxEVT_GRID_EDITOR_CREATED, [=](wxGridEditorCreatedEvent& event) {
        event.GetControl()->Bind(wxEVT_KEY_DOWN, &Grid::OnKeyDown, this);
    });

这将不是处理初始键按,该按键首先会显示编辑器,但据我了解,这是不必要的。