2011-01-26 105 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

我沒有回答我自己的問題找到,因爲沒有其他答案。也許這對未來的其他人有用。