[英]How to catch KeyEvents when wxGrid Editor is Shown
在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键时才会显示MessageBox。 仍然显示编辑器时如何捕获KeyEvent,例如,用户在当前单元格中键入a
并显示MessageBox。
您需要使用自定义编辑器(可能只是从标准wxGridCellTextEditor
),并绑定到在其Create()
中Create()
的编辑控件的wxEVT_CHAR
事件。
请注意,如果要处理初始按键,从而导致首先显示编辑器,则需要重写wxGridCellEditor::StartingKey()
,因为此按键发生在显示编辑控件之前。
对我有用的一种方法是将处理程序创建后将其连接到每个网格编辑器,方法是将其添加到Grid
构造函数中:
Bind(wxEVT_GRID_EDITOR_CREATED, [=](wxGridEditorCreatedEvent& event) {
event.GetControl()->Bind(wxEVT_KEY_DOWN, &Grid::OnKeyDown, this);
});
这不会处理最初的按键操作,该操作会导致首先显示编辑器,但是据我了解,此处没有必要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.