如何在wxwidgets

时间:2018-04-19 18:11:51

标签: c++ user-interface wxwidgets

我有一个框架,它有4个文本框和一个链接(更改no文本框)。当用户点击链接时,我隐藏了第4个文本框。但是发生的事情是在隐藏第4个文本框之后,它的空间仍然是空白的。我不想把它的空间留空。该空间应该消失,框架应该调整大小。有什么方法可以实现这个目标吗?当用户再次点击链接时(更改no文本框我再次显示第4个文本框。

代码:

m_ComputerNameText1 = new wxTextCtrl(m_panel, wxID_ANY, "computerName", wxDefaultPosition, wxSize(250, wxDefaultSize.GetHeight()));
m_ComputerNameText2 = new wxTextCtrl(m_panel, wxID_ANY, "computerName1", wxDefaultPosition, wxSize(250, wxDefaultSize.GetHeight()));
m_ComputerNameText3 = new wxTextCtrl(m_panel, wxID_ANY, "computerName3", wxDefaultPosition, wxSize(250, wxDefaultSize.GetHeight()));
m_ComputerNameText4 = new wxTextCtrl(m_panel, wxID_ANY, "computerName4", wxDefaultPosition, wxSize(250, wxDefaultSize.GetHeight()));
m_hyperLinkOption = new wxHyperlinkCtrl(m_panel, wxID_ANY, "Change no of textboxes", wxT(""), wxDefaultPosition, wxSize(135, wxDefaultSize.GetHeight()));

m_userPassSizer->Add(m_ComputerNameText1, 0, wxALIGN_LEFT | wxALL, 0);
m_userPassSizer->Add(m_ComputerNameText2, 0, wxALIGN_LEFT | wxALL, 0);
m_userPassSizer->Add(m_ComputerNameText3, 0, wxALIGN_LEFT | wxALL, 0);
m_userPassSizer->Add(m_ComputerNameText4, 0, wxALIGN_LEFT | wxALL, 0);
m_userPassSizer->Add(m_hyperLinkOption , 0, wxALIGN_LEFT | wxALL, 0);

单击超链接时执行以下函数。

void OnAuthCodeOptionLinkClicked(wxHyperlinkEvent& event)
{
    if (!m_hyperlinkOptionSelected)
    {
    m_hyperlinkOptionSelected= true;
    m_ComputerNameText4->Hide();
    m_hyperLinkOption->SetLabel("Go back");
}
else
{
    m_hyperlinkOptionSelected= false;
    m_ComputerNameText4->Show();
    m_hyperLinkOption->SetLabel("change no of textboxes");
}

}

通过这种方式,我必须隐藏并显示第4个文本框。隐藏一些空白后仍然存在。我怎样才能获得那个空格并在第4个文本框的位置取链接?

1 个答案:

答案 0 :(得分:0)

每当我需要动态更新控件的大小时,我总是会调用Layout()Refresh()

您可以在此处找到有关布局的更多信息: http://docs.wxwidgets.org/3.1/classwx_window.html#a1b143c3e72bd0af533b76db4830a6113 以及一般有关窗口大小的一些好信息: http://docs.wxwidgets.org/3.1/overview_windowsizing.html

调用布局假定您构建和管理文本框等的类是wxWindow派生控件本身(如面板,框架等)。如果没有,就像您在视图模型上进行更改一样,您需要在拥有窗口上调用Layout和Refresh:

void UpdateView()
{
    view->Layout();
    view->Refresh();
}

您可能需要使用尺寸大小的窗户,最小尺寸的窗户等,以获得您想要的确切行为。