我在代码中构建了一个ToolStripPanel,其中我添加了一个ToolStrip,然后添加了几个ToolStripButtons和ToolStripSeparator,是否需要手动遍历并删除和/或调用dispose?也就是说,循环遍历按钮和分隔符并调用dispose对其进行处理,然后从ToolStripPanel中删除ToolStripPanel中的ToolStrip和dispose ToolStrip,最后从它的父控件中删除ToolStripPanel并对其进行处理?
更新
阅读Control.Dispose的文档,似乎调用父级的Dispose将释放这些子级。不清楚的是ToolStripItems是否是ToolStrip的适当“子”,因为您没有将它们添加到ToolStrip.Controls集合中,而是将它们添加到ToolStrip.Items集合中。当查看ToolStrip.Controls文档时,它说这个属性与这个类无关。
与ToolStripPanel相同的是,您不调用ToolStripPanel.Controls.Add(toolstrip),而是调用ToolStripPanel.Join(toolstrip)。
发布于 2012-08-29 18:13:49
是的,ToolStripItems被当作儿童对待。ToolStrip.Dispose()迭代项集合并处理项。这些项没有添加到控件集合中,因为它们不是从Control派生的类。它们是“无窗口”控件,并使用它们的父控件来呈现自己。所以它们很便宜。
实际上,ToolStripPanel.Join()确实将ToolStrip添加到Controls集合中(ToolStrip确实从控件继承)。它只需要做一件额外的事情,它需要移动在正确的位置。有四个过载。
因此,没有额外的工作需要,处置面板是足够得到它的工具条和他们的项目以及处置。
发布于 2012-08-29 16:49:36
如果要在代码中添加这些组合,则必须手动释放它们,或者将它们(手动)添加到components集合中,它将为您处理它们)。
如果在设计器中添加了这些控件/组件,则不需要手动处理它们。它们将被添加到一个components集合中,该集合将由设计器生成的代码处理。这个集合处理了表格上所有的孩子。
https://stackoverflow.com/questions/12182520
复制相似问题