wxwidgets изменяет размер сайзеров после скрытия/отображения дочерних элементов управления

У меня wxwindow. Внутри у меня есть wxBoxSize (Vertical). У сайзера есть 3 дочерних элемента управления.

Я хочу иметь возможность скрыть один из трех дочерних элементов управления и автоматически изменить размер размера и его родителя. Например, когда я скрываю один дочерний элемент управления сайзером, окно уменьшается на 200 пикселей.

Прямо сейчас мой метод отображения скрытия определенных элементов управления и изменения размера окна выглядит так:

void GenUIAanleverOptionsDialog::OnToggleButtonShowLabels( wxCommandEvent& event )
{
    if(this->btnShowLabels->GetValue())
    {
        this->pnlInfoLabels->Show(true);
        this->SetSize(this->GetSize().GetWidth(), 573);
    }
    else
    {
        this->pnlInfoLabels->Show(false);
        this->SetSize(this->GetSize().GetWidth(), 294);
    }
}

person Kwaak    schedule 16.12.2009    source источник


Ответы (1)


Решение, которое я нашел работающим для меня, заключалось в том, чтобы скрыть/показать Sizer, который содержал панель. После изменения видимости сайзера потребовался вызов метода сайзера Layout().

Это, однако, также не регулировало положение родительского окна, поэтому вызов метода Fit() в wxWindow также был необходим.

Окончательный код:

void GenUIStatusAanleverFrame::OnToggleButtonShowLabels( wxCommandEvent& event )
{
    if(this->btnShowLabels->GetValue())
    {
        this->sizerInfoLabels->Show(true);
        this->sizerOverview->Layout();
    }
    else
    {
        this->sizerInfoLabels->Show(false);
        this->sizerOverview->Layout();
    }
    this->Fit();
}
person Kwaak    schedule 18.12.2009