Many times there is a clear method, that removes all the items from the collections, are these items disposed also.
Like,
toolStripMenuItem.DropDownItems.Clear();
is sufficient, or should I have to call like that:
foreach (ToolStripItem item in toolStripMenuItem.DropDownItems)
{
toolStripMenuItem.DropDownItems.Remove(item);
item.Dispose();
}
Edit: Well ToolStripItem is an example not a question, for those who says Clear is enough I found another example, TabControl has also item collection and clear method. But TabControls can have complex controls (at least I have), which needs to be explicitly Dispose (even if they are Disposed automatically at some point by GC, cause they take huge memory). I guess the best answer is divo comment to dispose the items, and then call clear.
Q: Does?
A: No - Clear
does not dispose the items (they could be used in other parts of your application).
So, if your ToolStripItems are standard .NET ones, should Clear
be sufficient? After some reflection I'd say "probably not".
Yeah, this is true that if you will have any references to the ToolStripItem in other part of your application, the .NET GarbageCollector will destroy(use the class destructor) it automatically. But, it will not call the Dispose(true)
method, that is, however, required for the form's IDisposable
components.
Actually, I believe that you will, however, need to explicitly Dispose
your Items, like the ToolStrip's Dispose method does (replace this by yourToolStrip):
if (!this.Items.IsReadOnly)
{
for (int i = this.Items.Count - 1; i >= 0; i--)
{
this.Items[i].Dispose();
}
this.Items.Clear();
}
I also created the following thread to clarify this question more generally.