显示WXGRID编辑器时如何捕获关键因素
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时才会出现消息框。当仍显示编辑器时,如何捕获关键因素,例如,显示了当前单元格的用户类型a
,并且显示了消息框。
您需要使用自定义编辑器(可能只是从标准wxGridCellTextEditor
派生),并绑定到其Create()
中创建的编辑控件的wxEVT_CHAR
事件。
请注意,如果要处理初始键按,这首先会显示编辑器,则需要覆盖wxGridCellEditor::StartingKey()
,因为此密钥按下在显示编辑控件之前发生的。
通过将其添加到 Grid
构造函数来创建后,对我有用的一种方法是将处理程序连接到每个网格编辑器:
Bind(wxEVT_GRID_EDITOR_CREATED, [=](wxGridEditorCreatedEvent& event) {
event.GetControl()->Bind(wxEVT_KEY_DOWN, &Grid::OnKeyDown, this);
});
这将不是处理初始键按,该按键首先会显示编辑器,但据我了解,这是不必要的。
相关文章:
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 当类定义不可见时捕获异常
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- Python中的for循环与C++有何不同
- 在 lambda 捕获中声明的变量的类型推导
- RtlCaptureStackBackTrace未捕获任何帧
- 如何在Qt中取消捕获字符串
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- 如何将strftime中的格式错误作为异常捕获
- 在Linux下捕获SIGKILL的C++程序
- 按值捕获引用时出现非常量
- 捕获lambda中的std::数组
- 由cin中的字符串中未捕获空白引起的分割错误
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- 当简单捕获中的标识符显示为参数的声明符 ID 时,没有编译器诊断
- SDL_PollEvent() 无法捕获类函数内部SDL_QUIT?
- 显示WXGRID编辑器时如何捕获关键因素