wxWidgets 2.9.1 - 使用多个wxStaticBox时键盘导航问题

时间:2011-01-26 20:15:46

标签: c++ wxwidgets

wxWidgets 2.9.1 documentation推荐创建静态框的新方法 - 我们应该在staticbox中创建其子控件的所有控件。

但是,当对话框/面板中有多个静态框时,键盘导航会出现问题。无法在放置在不同静态框中的控件之间移动光标。方法wxWindow :: MoveAfterInTabOrder()和wxWindow :: MoveBeforeInTabOrder在这里没用,因为它们只适用于同一父窗口的兄弟姐妹。

此示例代码创建了包含两个静态框的对话框,每个静态框都是两个编辑控件的父级。如何能够使用编辑控件#2中的Tab键导航到编辑控件#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 个答案:

答案 0 :(得分:1)

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

可在相应的ticket page

上找到更多信息

我确实回答了我自己的问题,因为没有其他答案。也许这对将来的其他人有用。