0

ToolStripPanel我在代码中构建了一个我添加 aToolStrip并随后添加几个ToolStripButtons 和ToolStripSeparators 的代码。我是否需要手动完成并删除和/或调用 dispose ?也就是说,循环遍历按钮和分隔符并对它们调用 dispose,然后ToolStripToolStripPanel和 dispose 中ToolStrip删除,最后ToolStripPanel从它的父控件中删除并处理它?

更新

阅读Control.Dispose的文档,似乎调用Dispose父母会处置孩子。不清楚的是ToolStripItems 是否是适当的“孩子”,ToolStrip因为您没有将它们添加到ToolStrip.Controls集合中,而是将它们添加到ToolStrip.Items集合中。查看ToolStrip.Controls文档时,它说此属性与此类无关。

ToolStripPanel您不调用的情况相同ToolStripPanel.Controls.Add(toolstrip),而是ToolStripPanel.Join(toolstrip)

4

2 回答 2

1

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

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

所以不需要额外的工作,处理面板就足以处理它的工具条和它们的项目。

于 2012-08-29T18:13:49.713 回答
0

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

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

于 2012-08-29T16:49:36.660 回答