我是否需要在ToolStripPanel,ToolStrip和ToolStripItems上调用dispose?

时间:2012-08-29 16:32:17

标签: c# idisposable toolstrip toolstripbutton toolstrippanel

我在代码中构建ToolStripPanel,我在其中添加了ToolStrip,然后添加了几个ToolStripButtonToolStripSeparator。我是否需要手动完成并删除和/或调用处理这些内容?也就是说,遍历按钮和分隔符并调用它们上的dispose,然后从ToolStrip中移除ToolStripPanel并释放ToolStrip,最后从中删除ToolStripPanel父母控制并处置它?

更新

阅读Control.Dispose的文档,似乎在父母身上调用Dispose会处置这些孩子。不明确的是ToolStripItem s是ToolStrip的正确“孩子”,因为您没有将它们添加到ToolStrip.Controls集合,而是添加到ToolStrip.Items集合。查看ToolStrip.Controls文档时,它表示此属性与此类无关。

ToolStripPanel相同,因为您不会调用ToolStripPanel.Controls.Add(toolstrip),而是调用ToolStripPanel.Join(toolstrip)

2 个答案:

答案 0 :(得分:1)

是的,ToolStripItems被视为子项。 ToolStrip.Dispose()迭代Items集合并处理这些项目。项目已添加到Controls集合中,因为它们不是从Control派生的类。它们是“无窗口”控件,并使用它们的父对象进行渲染。这使得它们非常便宜。

ToolStripPanel.Join()确实将ToolStrip添加到Controls集合(ToolStrip 从Control继承)。它只需要做一件额外的事情,它需要在正确的位置移动条带。并且有4次重载。

因此,不需要额外的工作,处理面板就足以让它的工具条及其物品也被处理掉。

答案 1 :(得分:0)

如果您要在代码中添加这些组件,则必须手动处理它们或将它们(手动)添加到components集合中,它将为您处理它们。

如果在Designer中使用/添加这些控件/组件,则无需手动处理它们。它们将被添加到components集合中,该集合将由Designer生成的代码处理。该集合处理表格中的所有孩子。