删除控件wxWidgets

Remove controls wxWidgets

本文关键字:wxWidgets 控件 删除      更新时间:2023-10-16

我发现这很难从搜索中找到,但很简单,你如何从面板中删除控件?我有一些wxStaticText和wxTextCtrl,我想交换删除现有的项目,并将其替换为新的?有没有什么命令我可以调用,或者我必须自己做些什么?欢呼声

EDIT:正如ravenspoint指出的那样,仅仅删除控件是不够的。有些控件在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();

如果控件已添加到大小大小,则必须在它仍然有效时将其替换:

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

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

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

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