0

在 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 时出现。当仍然显示编辑器时如何捕获 KeyEvents,例如,用户键入a当前单元格并显示 MessageBox。

4

2 回答 2

1

您需要使用自定义编辑器(可能只是从标准派生wxGridCellTextEditor)并绑定到wxEVT_CHAR在其Create().

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

于 2016-11-27T13:52:03.203 回答
0

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

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

不会处理导致首先显示编辑器的初始按键,但据我了解,这里没有必要。

于 2016-11-27T22:56:32.750 回答