如何在显示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