【发布时间】:2012-12-16 05:46:06
【问题描述】:
我发现这很难从搜索中找到,但很简单,如何从面板中删除控件?我有一些 wxStaticText 和 wxTextCtrl,我想交换删除现有项目并用新项目替换它们?有什么命令我可以调用还是我必须自己做点什么?干杯
【问题讨论】:
我发现这很难从搜索中找到,但很简单,如何从面板中删除控件?我有一些 wxStaticText 和 wxTextCtrl,我想交换删除现有项目并用新项目替换它们?有什么命令我可以调用还是我必须自己做点什么?干杯
【问题讨论】:
编辑:正如 ravenspoint 指出的那样,仅仅删除控件是不够的。一些控件在Destroy() 中执行额外的清理。
您可以简单地Destroy() 控制。 wxWidgets 会自动将其从父窗口中移除并释放其内存。
wxWindow* ctrl = new wxStaticText(this);
ctrl->Destroy();
ctrl = new wxTextCtrl(this);
如果没有指向控件的指针,可以使用FindWindowById、FindWindowByLabel或FindWindowByName获取:
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(例如背景颜色、边框等)。
【讨论】:
Destroy() 中执行额外的清理,这不是由析构函数完成的。
【讨论】: