2011-01-26 43 views
1

wxWidgets 2.9.1 documentation推荐创建静态盒子的新方法 - 我们应该在静态盒子内创建所有控件作为它的子节点。wxWidgets 2.9.1 - 使用多个wxStaticBoxes时的键盘导航问题

但是,当对话框/面板中有多个静态框时,键盘导航存在问题。无法在放置在不同静态框中的控件之间移动光标。方法wxWindow :: MoveAfterInTabOrder()和wxWindow :: MoveBeforeInTabOrder在这里没有用处,因为它们只与同一父窗口的同级一起工作。

此示例代码创建带有两个静态框的对话框,每个静态框都是两个编辑控件的父对象。我应该怎么做才能使用Tab键从编辑控制#2导航到编辑控制#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

回答

1

问题终于解决了的wxWidgets 2.9.5的预发布版本。

更多的信息可以在相应的ticket page

我没有回答我自己的问题找到,因为没有其他答案。也许这对未来的其他人有用。