我創建了一個全域面板并呼叫了一個創建大小調整器和按鈕的方法。該按鈕清除sizer(即面板),然后洗掉is。然后,呼叫另一個方法,使用相同的邏輯,它創建另一個 sizer 和另一個按鈕。這次他們不作業了。
我的代碼(windows,vs作業室):
#include "MainFrame.h"
#include <wx/wx.h>s
MainFrame::MainFrame(const wxString& title) : wxFrame(nullptr, wxID_ANY, title)
{
panel = new wxPanel(this);
StartParty(panel);
}
void MainFrame::ClearButtonClicked(wxCommandEvent& evt)
{
panel->GetSizer()->Clear(true);
panel->SetSizerAndFit(nullptr);
ChooseMode(panel);
}
void MainFrame::StartParty(wxPanel* parent)
{
wxButton* start_button = new wxButton(parent, wxID_ANY, "Start the Party!", wxDefaultPosition, wxSize(200, 70));
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->AddStretchSpacer(1);
sizer->Add(
start_button,
0,
wxALL | wxALIGN_CENTER,
0);
sizer->AddStretchSpacer(1);
parent->SetSizerAndFit(sizer);
start_button->Bind(wxEVT_BUTTON, &MainFrame::ClearButtonClicked, this);
}
void MainFrame::ChooseMode(wxPanel* parent)
{
wxButton* select_button = new wxButton(parent, wxID_ANY, "Choose", wxDefaultPosition, wxSize(200, 70));
wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL);
sizer->AddStretchSpacer(1);
sizer->Add(
select_button,
0,
wxALL | wxALIGN_CENTER,
0);
sizer->AddStretchSpacer(1);
parent->SetSizer(sizer);
}
uj5u.com熱心網友回復:
正如評論中提到的那樣,您確實需要Layout()
,因為這實際上是重新定位視窗 -SetSizer()
只是指定用于執行此操作的大小調整器,但不會立即自行執行任何操作(它會在下一次調整視窗大小時時間,因為這會導致呼叫Layout()
)。
但是,即使它與問題本身有些無關,我認為您根本不應該這樣做,而是使用wxSimplebook。這個簡單的(原文如此)類允許您向其中添加一些頁面,然后在它們之間輕松切換。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/505348.html