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

时间:2009-11-18 16:11:21

标签: c# .net winforms tabcontrol

我正在使用一个名为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?

3 个答案:

答案 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()上变为无效。