如何在显示wxGrid编辑器时捕获KeyEvents

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

我的方法:

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

回答:

一个办法是处理程序连接到每个网格编辑它已被创建之后,加入这Grid构造:

Bind(wxEVT_GRID_EDITOR_CREATED, [=](wxGridEditorCreatedEvent& event) { 

event.GetControl()->Bind(wxEVT_KEY_DOWN, &Grid::OnKeyDown, this);

});

这将处理最初的按键,其结果首先展示了编辑,但是从我所了解的情况来看,在这里并不需要。

回答:

您需要使用自定义编辑器(可能仅从标准wxGridCellTextEditor导出)并绑定到在其Create()中创建的编辑控件的wxEVT_CHAR事件。

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

以上是 如何在显示wxGrid编辑器时捕获KeyEvents 的全部内容, 来源链接: utcz.com/qa/259815.html

回到顶部