【发布时间】:2021-01-13 13:42:38
【问题描述】:
我最初有代码在 onInit 方法中将焦点设置到对话框中的第一个小部件。但它有问题:如果我按下 TAB,确实焦点移动到下一个控件 (wxTextCtrl),它得到蓝色的“焦点”颜色,但 “焦点”颜色/突出显示没有从上一个焦点小部件中删除。所以现在看起来第一个和第二个控件同时具有焦点......
当手动(通过按 TAB)循环一圈(直到最后一个控制然后绕到第一个)时,突然一切正常。也就是说,当将焦点从第一个控件移动到下一个控件时,第一个视觉上失去焦点(蓝色被移除),因为它应该。从现在开始,只有一项具有焦点颜色/高光。
因此,我没有将焦点设置在第一个控件上,而是尝试了一种不同的方法:我将焦点设置到对话框中的最后一个控件,它始终是 OK 按钮。接下来,我想以编程方式模拟对话框按下并接收 TAB。所以我写了这个(在 Dialog::onInit 里面):
m_buttonOK->SetFocus();
wxKeyEvent key;
key.SetEventObject(this);
key.SetEventType(wxEVT_CHAR);
key.m_keyCode=WXK_TAB;
ProcessWindowEvent(key);
现在焦点确实从 OK 按钮上移开了,但它并没有环绕到第一个控件。 只有当我在对话框打开后手动按 TAB 时,第一项才会获得焦点。
问题:为什么将焦点设置在第一个小部件上的这种环绕方式不适用于上面显示的代码?
【问题讨论】:
-
您是否将 wxPanel 作为所有控件的父级或自己处理 TABbing?
标签: c++11 wxwidgets keyevent programmatically