The following code snippet throws an exception:
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
Control[] c = new Control[] { new Control(), new Control(), new
Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),};
Form form = new Form();
form.Controls.AddRange( c );
foreach( Control cont in form.Controls )
{
cont.Dispose();
}
}
The reason is that the Control.Dispose() method actually removes
itself from the Parent control collection so half way through the
foreach loops the cont variable is null.
What is the normal way to itterate through a control collection
disposing of controls?
And yes, I realize that controls dispose of the controls in their
collection but I have an instance where I can't dispose of the parent
control but still need to dispose of the controls in its collection.
Ken Tucker [MVP] - 30 Oct 2004 04:41 GMT
Hi,
Use a for loop instead. Start with last control end with first
Control[] c = new Control[] { new Control(), new Control(), new
Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),};
Form form = new Form();
form.Controls.AddRange( c );
for( int x = this.Controls.Count-1; x>=0; x-- )
{
this.Controls.RemoveAt(x);
}
Ken
------------------------
The following code snippet throws an exception:
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
Control[] c = new Control[] { new Control(), new Control(), new
Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),
new Control(), new Control(), new Control(),};
Form form = new Form();
form.Controls.AddRange( c );
foreach( Control cont in form.Controls )
{
cont.Dispose();
}
}
The reason is that the Control.Dispose() method actually removes
itself from the Parent control collection so half way through the
foreach loops the cont variable is null.
What is the normal way to itterate through a control collection
disposing of controls?
And yes, I realize that controls dispose of the controls in their
collection but I have an instance where I can't dispose of the parent
control but still need to dispose of the controls in its collection.