4

私は wxWindow を持っています。その中に wxBoxSize (Vertical) があります。sizer には 3 つの子コントロールがあります。

3 つの子コントロールの 1 つを非表示にして、サイザーとその親のサイズを自動的に変更できるようにしたいと考えています。たとえば、サイザーの 1 つの子コントロールを非表示にすると、ウィンドウが 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);
    }
}
4

1 に答える 1

7

私が見つけた解決策は、パネルを含むサイザーを非表示/表示することでした。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();
}
于 2009-12-18T11:05:35.900 に答える