wxWidgets 2.9.1 - Проблема с навигацией с помощью клавиатуры при использовании нескольких wxStaticBox.

wxWidgets 2.9.1 документация рекомендует новый способ создания статических блоков - мы должны создавать все элементы управления внутри staticbox как его дочерние элементы.

Тем не менее, есть проблема с навигацией с помощью клавиатуры, когда у вас есть более одного статического поля в вашем диалоговом окне/панели. Невозможно перемещать курсор между элементами управления, расположенными в разных статических блоках. Методы 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();
    }
}

Пожалуйста, не советуйте мне использовать старый способ создания элементов управления (как братьев и сестер статических ящиков). Новый способ создания статических ящиков решает неприятную сбой отображения — это реальная проблема, которую я пытаюсь решить. решать.

Спасибо

Вацек


person Wacek    schedule 26.01.2011    source источник


Ответы (1)


Проблема была окончательно решена в предварительной версии wxWidgets 2.9.5.

Дополнительную информацию можно найти на соответствующей странице билетов.

Я ответил на свой вопрос, потому что других ответов не было. Возможно, это будет полезно для кого-то еще в будущем.

person Wacek    schedule 24.02.2013