删除TabPage:Dispose或Clear或两者兼而有之?

我正在使用一个名为tabDocuments的TabControl的Windows窗体。 我遇到了这段代码,它删除了TabControl中的所有页面。

for (int i = tabDocuments.TabPages.Count - 1; i > -1; i--) { tabDocuments.TabPages[i].Dispose(); } tabDocuments.TabPages.Clear(); 

编写此代码的人已经离开了一段时间。 我试图理解为什么代码在处理每个tabPages后调用Clear()(看起来对我来说是不必要的)。 任何人都可以向我解释为什么? 或者调用Clear()额外?

此代码段来自Control.Dispose:

  if (this.parent != null) { this.parent.Controls.Remove(this); } 

因此,您只需要调用Dispose,而不是Clear。

在每个标签页上调用Dispose()实际上并没有从TabPages集合中删除它们,它只是处理它们。 对Clear()的调用是从集合中删除它们的原因。 如果你不打电话给Clear()他们仍然会在那里,并且可能会发生不好的事情,因为你最终会在他们被处置后试图使用它们。

首先从集合中删除Tab,然后从Dispose()中删除。 从不Dispose()仍然在使用的东西,因为它会导致exception和奇怪的行为。

另外,请确保没有其他人对选项卡有引用,否则这些引用将在Dispose()上变为无效。