C++11 wxWidgets P程序移动到下一个输入控件

C++11 wxWidgets P程序移动到下一个输入控件,c++11,wxwidgets,keyevent,programmatically,C++11,Wxwidgets,Keyevent,Programmatically,我最初有一段代码,在onInit方法中将焦点设置为对话框中的第一个小部件。但它也有问题:如果我按TAB键,焦点确实会移动到下一个控件(WXTEXTCRL),该控件获得蓝色的“焦点”颜色,但“焦点”颜色/高光没有从以前的焦点小部件中删除。所以现在看起来第一个和第二个控件同时有焦点 当手动循环(按TAB键)整圈(直到最后一个控件,然后绕到第一个控件)时,突然之间所有操作都正常。也就是说,当将焦点从第一个控件移动到下一个控件时,第一个视觉上失去了焦点(蓝色被移除)。从现在起,只有一项具有焦点颜色/高光

我最初有一段代码,在onInit方法中将焦点设置为对话框中的第一个小部件。但它也有问题:如果我按TAB键,焦点确实会移动到下一个控件(WXTEXTCRL),该控件获得蓝色的“焦点”颜色,但“焦点”颜色/高光没有从以前的焦点小部件中删除。所以现在看起来第一个和第二个控件同时有焦点

当手动循环(按TAB键)整圈(直到最后一个控件,然后绕到第一个控件)时,突然之间所有操作都正常。也就是说,当将焦点从第一个控件移动到下一个控件时,第一个视觉上失去了焦点(蓝色被移除)。从现在起,只有一项具有焦点颜色/高光

因此,我没有在第一个控件上设置焦点,而是尝试了另一种方法:我将焦点设置为对话框中的最后一个控件,该控件始终是OK按钮。接下来,我想通过编程模拟对话框按下并接收选项卡。所以我写了这个(在Dialog::onInit中):

现在焦点确实从OK按钮移开,但它不会环绕到第一个控件。 只有在对话框打开后手动按TAB键时,第一项才获得焦点


问题:为什么将焦点集中在第一个小部件上的方法与上面显示的代码不兼容?

首先,您最初的问题几乎肯定与未在某个事件处理程序中调用
event.Skip()
有关,请参阅中的说明


其次,您不能将wx事件发送到本机windows,因为他们对此一无所知。在这种情况下,您可以使用wxPanel来做您想做的事情,但一般来说,您所做的简单操作不能也不会可靠地工作。

您是否将wxPanel作为所有控件的父控件或自己处理制表符?我只有三个按钮的事件处理程序:取消、确定和还原。所以我不认为忘记event.Skip()是这里的问题,感谢wxWindow::Navigate()的提示,我将查找文档并尝试它。我所能说的是,获得多个控件的唯一方法似乎是通过处理,而不是跳过,
wxFocusEvent
。如果你找到了一种不同的方法,请尝试用最少的代码复制它,并为它打开一个bug,因为这将是一个bug。嗨,我不是在处理wxFocusEvent。在可预见的未来,我没有时间做出这样的榜样。。。我需要专注于手头的工作。也许以后吧。虽然我非常喜欢wxWidgets和Qt,但我将来可能会使用Uno。
    m_buttonOK->SetFocus();
    wxKeyEvent key;
    key.SetEventObject(this);
    key.SetEventType(wxEVT_CHAR);
    key.m_keyCode=WXK_TAB;
    ProcessWindowEvent(key);