我正在使用一个名为tabDocuments的TabControl的Windows窗体。我遇到了这段代码,它删除了TabControl中的所有页面。
for (int i = tabDocuments.TabPages.Count - 1; i > -1; i--) {
tabDocuments.TabPages[i].Dispose();
}
tabDocuments.TabPages.Clear();
编写此代码的人已经离开了一段时间。我试图理解为什么代码在处理每个tabPages后调用Clear()(看起来对我来说是不必要的)。有人可以向我解释原因吗?或者正在调用Clear()extra?
答案 0 :(得分:3)
此代码段来自Control.Dispose:
if (this.parent != null)
{
this.parent.Controls.Remove(this);
}
因此,您只需要调用Dispose,而不是Clear。
答案 1 :(得分:2)
在每个标签页上调用Dispose()实际上并没有从TabPages集合中删除它们,它只是处理它们。对Clear()的调用是从集合中删除它们的原因。如果你不打电话给Clear()他们仍然会在那里,并且可能会发生不好的事情,因为你最终会在他们被处置后试图使用它们。
答案 2 :(得分:1)
首先从集合中删除Tab,然后从Dispose()中删除。从不Dispose()仍然在使用的东西,因为它会导致异常和奇怪的行为。
另外,请确保没有其他人对选项卡有引用,否则这些引用将在Dispose()上变为无效。