我发现在搜索中很难找到这个问题的答案,但很简单,如何从面板中删除控件?我有一些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()
中执行额外的清理工作,而析构函数没有完成这些工作。 - Anonymous Coward