繁体   English   中英

为什么第二个 wxSizer 无法使按钮居中?

[英]Why does the second wxSizer fail to center the button?

我创建了一个全局面板并调用了一个创建大小调整器和按钮的方法。 该按钮清除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);
}

第一个按钮,正在工作

第二个按钮,不居中(为什么?)

如评论中所述,您确实需要Layout() ,因为这实际上是重新定位 windows - SetSizer()只是指定用于执行此操作的大小,但不会立即执行任何操作(它会在下次调整 window 的大小,因为这会导致调用Layout() )。

但是,即使它与问题本身有些无关,我认为您根本不应该这样做,而是使用wxSimplebook 这个简单的(原文如此)class 允许您向其中添加几页,然后在它们之间轻松切换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM