0

嗨,我正在尝试从 wxBoxSizer(wxVERTICAL) 中删除所有元素(包括 wxSizers 和 wxWindows)。我使用的层次结构如下面的截图所示。

  1. wxBoxSizer(wxVERTICAL) :这包含所有内容,我想删除此 sizer 中的所有内容。让我们称这个 sizer 为 mainSizer。
  2. wxPanel:我们称它为 elementPanel
  3. wxBoxSizer(wxVERTICAL):这包含第 4 步中的水平尺寸器
  4. wxBoxSizer(wxHORIZONTAL):这包含 wxStaticText 和水平间隔
  5. wxStaticText 包含我要显示的文本
  6. wxBoxSizer(wxHORIZONTAL):这是固定宽度的水平间隔。

请注意,静态文本上方和下方还有两个垂直间隔,以使静态文本垂直居中,但我没有在图中显示它们。

我只有一个 mainSizer 和许多这样的 elementPanel 垂直放置,因为包含 mainSizer 是垂直的。现在我想从 mainSizer 中删除所有垂直放置的 elementPanel(以及其中的所有内容)。我怎样才能做到这一点?wxsizer 有与之关联的 id 吗?如果没有,我如何从程序的另一部分找到这个特定的 mainSizer,以便我可以删除其中的所有内容。也就是说,我想删除我在 mainSizer 中添加的所有 elementPanel(以及里面的所有内容),但不删除 mainSizer 本身。

我想我可以在 wxPanel 中使用 mainSizer 并使用它的 id 来访问 mainSizer。但是问题仍然存在,我如何从 mainSizer 中删除每个子项(包括 sizer 和 wxWindow)?

主尺寸器

4

1 回答 1

0

据我所知,没有命令可以删除或销毁 sizer 的孩子。来自已弃用函数 wxSizer::Remove(wxWindow* window) 的文档

wxSizer::Remove(wxWindow* 窗口); “从 sizer 中删除子窗口,但不会破坏它(因为窗口归其父窗口所有,而不是 sizer)。”

因此,要销毁 sizer 的元素,您必须从面板的父级调用 DestroyChildren() 。您可以专门为此目的制作一个窗口,并让它的子元素成为您想要在 box sizer 中的元素。

parentWindowInsideBoxSizer->DestroyChildren();

您还可以删除单个孩子。

parentWindowInsideBoxSizer->RemoveChild(child)  

https://docs.wxwidgets.org/3.0/classwx_window.html#acee332ed4368d26e8bc3db5767c1240a

于 2021-07-09T12:14:07.523 回答