wxWidgets 2.9.1 документация рекомендует новый способ создания staticbox - мы должны создать все элементы управления внутри staticbox как его дочерние элементы.
Однако при навигации с помощью клавиатуры возникают проблемы.иметь более одного staticbox в вашем диалоге / панели.Невозможно перемещать курсор между элементами управления, расположенными в разных staticbox.Методы wxWindow :: MoveAfterInTabOrder () и wxWindow :: MoveBeforeInTabOrder здесь бесполезны, поскольку они работают только с братьями и сестрами одного и того же родительского окна.
Этот пример кода создает диалог с двумя staticbox, каждый из которых является родителемдва элемента редактирования.Что я должен сделать, чтобы иметь возможность перемещаться с помощью клавиши 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();
}
}
Пожалуйста, не советуйте мне использовать старый способ создания элементов управления (как братьев и сестерстатические боксы).Новый способ создания staticbox решает неприятный сбой отображения - вот настоящая проблема, которую я пытаюсь решить.
Спасибо
Wacek