wxWidgets 2.9.1 documentation推荐创建静态框的新方法 - 我们应该在staticbox中创建其子控件的所有控件。
但是,当对话框/面板中有多个静态框时,键盘导航会出现问题。无法在放置在不同静态框中的控件之间移动光标。方法wxWindow :: MoveAfterInTabOrder()和wxWindow :: MoveBeforeInTabOrder在这里没用,因为它们只适用于同一父窗口的兄弟姐妹。
此示例代码创建了包含两个静态框的对话框,每个静态框都是两个编辑控件的父级。如何能够使用编辑控件#2中的Tab键导航到编辑控件#3?
void CreateTestDialog(wxWindow* parent)
{
wxWindowID id = 10010;
long style = wxCAPTION|wxRESIZE_BORDER|wxSYSTEM_MENU|wxCLOSE_BOX|wxTAB_TRAVERSAL;
wxDialog dlg;
dlg.SetExtraStyle(wxWS_EX_BLOCK_EVENTS);
if (dlg.Create(parent, id, wxT("Tab Order Test"), wxDefaultPosition, wxDefaultSize, style))
{
wxBoxSizer* sizer1 = new wxBoxSizer(wxVERTICAL);
dlg.SetSizer(sizer1);
wxStaticBox* staticbox1 = new wxStaticBox(&dlg, wxID_ANY, _("Static1"), wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
wxStaticBoxSizer* sizer2 = new wxStaticBoxSizer(staticbox1, wxVERTICAL);
sizer1->Add(sizer2, 0, wxGROW|wxALL, 5);
wxTextCtrl* m_ctl_text1 = new wxTextCtrl( staticbox1, 10011 );
sizer2->Add(m_ctl_text1, 0, wxGROW|wxALL, 5);
wxTextCtrl* m_ctl_text2 = new wxTextCtrl( staticbox1, 10012);
sizer2->Add(m_ctl_text2, 0, wxGROW|wxALL, 5);
wxStaticBox* staticbox2 = new wxStaticBox(&dlg, wxID_ANY, _("Static2"), wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
wxStaticBoxSizer* sizer3 = new wxStaticBoxSizer(staticbox2, wxVERTICAL);
sizer1->Add(sizer3, 0, wxGROW|wxALL, 5);
wxTextCtrl* m_ctl_text3 = new wxTextCtrl( staticbox2, 10013);
sizer3->Add(m_ctl_text3, 0, wxGROW|wxALL, 5);
wxTextCtrl* m_ctl_text4 = new wxTextCtrl( staticbox2, 10014);
sizer3->Add(m_ctl_text4, 0, wxGROW|wxALL, 5);
dlg.ShowModal();
}
}
请不要建议我使用旧的创建控件的方式(作为静态框的兄弟)。创建静态框的新方法解决了令人讨厌的display glitch - 这是我试图解决的真正问题。
由于
Wacek
答案 0 :(得分:1)