6

我发现这很难从搜索中找到,但很简单,如何从面板中删除控件?我有一些 wxStaticText 和 wxTextCtrl,我想交换删除现有项目并用新项目替换它们?有什么命令我可以调用还是我必须自己做点什么?干杯

4

2 回答 2

6

编辑:正如 ravenpoint 指出的那样,仅仅删除控件是不够的。一些控件在Destroy().

您可以简单地Destroy()控制。wxWidgets 会自动从父窗口中移除它并释放它的内存。

wxWindow* ctrl = new wxStaticText(this);
ctrl->Destroy();
ctrl = new wxTextCtrl(this);

如果你没有指向控件的指针,你可以使用FindWindowById,FindWindowByLabelFindWindowByName来获取它:

if(wxWindow* ctrl = wxWindow::FindWindowById(ID_MYCTRL,this))
    ctrl->Destroy();

如果控件被添加到一个sizer,它必须在它仍然有效时被替换:

newCtrl = new wxWindow(...);
sizer->Replace(oldCtrl,newCtrl); // both oldCtrl and newCtrl must be valid
oldCtrl->Destroy();
Layout(); // update sizer

或者,您可以从一开始就创建一个 wxTextCtrl 并将其设为只读。但是,需要进行额外的样式修改以使其看起来像 wxStaticText(例如背景颜色、边框等)。

于 2013-01-01T17:31:25.260 回答
1

最简单的做法是隐藏小部件。 http://docs.wxwidgets.org/trunk/classwx_window.html#a7ed103df04014cb3c59c6a3fb4d95328

但是,如果您想永久删除小部件,请调用 Destroy http://docs.wxwidgets.org/trunk/classwx_window.html#a6bf0c5be864544d9ce0560087667b7fc

于 2013-01-01T17:15:42.203 回答