我在代码中构建ToolStripPanel
,我在其中添加了ToolStrip
,然后添加了几个ToolStripButton
和ToolStripSeparator
。我是否需要手动完成并删除和/或调用处理这些内容?也就是说,遍历按钮和分隔符并调用它们上的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)
。
答案 0 :(得分:1)
是的,ToolStripItems被视为子项。 ToolStrip.Dispose()迭代Items集合并处理这些项目。项目未已添加到Controls集合中,因为它们不是从Control派生的类。它们是“无窗口”控件,并使用它们的父对象进行渲染。这使得它们非常便宜。
ToolStripPanel.Join()确实将ToolStrip添加到Controls集合(ToolStrip 从Control继承)。它只需要做一件额外的事情,它需要在正确的位置移动条带。并且有4次重载。
因此,不需要额外的工作,处理面板就足以让它的工具条及其物品也被处理掉。
答案 1 :(得分:0)
如果您要在代码中添加这些组件,则必须手动处理它们或将它们(手动)添加到components
集合中,它将为您处理它们。
如果在Designer中使用/添加这些控件/组件,则无需手动处理它们。它们将被添加到components
集合中,该集合将由Designer生成的代码处理。该集合处理表格中的所有孩子。