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

У меня есть wxWindow. Внутри у меня есть wxBoxSize (вертикальный). У классификатора есть 3 дочерних элемента управления.

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

Прямо сейчас мой метод показа скрытия определенных элементов управления и изменения размера окна выглядит следующим образом: (Hardcoded, fugly)

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);
    }
}

1 ответ

Решение

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

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

Финальный код:

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();
}
Другие вопросы по тегам