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