删除控件 wxWidgets

Bus*_*hes 6 c++ wxwidgets

我发现这很难通过搜索找到,但很简单,如何从面板中删除控件?我有一些 wxStaticText 和 wxTextCtrl,我想交换删除现有项目并用新项目替换它们?是否有某种我可以调用的命令,或者我必须自己制作一些东西吗?干杯

Ano*_*ard 5

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

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

wxWindow* ctrl = new wxStaticText(this);
ctrl->Destroy();
ctrl = new wxTextCtrl(this);
Run Code Online (Sandbox Code Playgroud)

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

if(wxWindow* ctrl = wxWindow::FindWindowById(ID_MYCTRL,this))
    ctrl->Destroy();
Run Code Online (Sandbox Code Playgroud)

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

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

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