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



我在代码中构建了一个ToolStripPanel,在其中我添加一个ToolStrip,随后添加几个ToolStripButtonToolStripSeparator。 我是否需要手动检查并删除和/或调用每个处置? 也就是说,循环遍历按钮和分隔符并调用 dispose 对它们进行调用,然后从ToolStripPanel中删除ToolStrip并释放ToolStrip,最后从其父控件中删除ToolStripPanel并释放它?

更新

阅读 Control.Pose 的文档,似乎对父级调用Dispose将释放子项。 不清楚的是ToolStripItem是否是ToolStrip的适当"子",因为您不会将它们添加到ToolStrip.Controls集合中,而是添加到ToolStrip.Items集合中。 在查看 ToolStrip.Controls 文档时,它说此属性与此类无关。

ToolStripPanel也是如此,因为您不称ToolStripPanel.Controls.Add(toolstrip)而是ToolStripPanel.Join(toolstrip).

是的,ToolStripItems 被视为子项。 ToolStrip.Dispose(( 迭代 Items 集合并释放这些项。 这些项不会添加到控件集合中,因为它们不是派生自控件的类。 它们是"无窗口"控件,并使用其父控件来呈现自身。 这使得它们非常便宜。

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

因此,无需额外的工作,处理面板就足以处理其工具及其物品。

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

如果使用设计器/

在设计器中添加这些控件/组件,则不必手动释放它们。 它们将被添加到将由设计器生成的代码释放的 components 集合中。 该集合将处理表单上的所有子项。

最新更新