Big*_*igM 1 c# foreach dispose winforms
我用它来删除我在Winform上创建的所有Picturebox
foreach (PictureBox pb in this.Controls)
{
pb.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
但每次只有大约一半的所有Picturebox被处理掉,另一半仍未触及
我用一个while (Controls.OfType<PictureBox>().Count() > 0 )循环来解决它,所以它只是被执行,直到所有的Picturebox都消失了,但这是一个糟糕的解决方案,我想知道为什么会发生这种情况以及我如何以正确的方式解决它
Control.Dispose 从集合中删除控件,更改索引并弄乱foreach.
您可以通过使用reverse for循环或通过创建包含引用的单独数组来解决此问题.
解决方案#0
for (int i = Controls.Count - 1; i >= 0; i--)
{
Controls[i].Dispose();
}
Run Code Online (Sandbox Code Playgroud)
解决方案#1
foreach (var control in Controls.Cast<Control>().ToArray())
{
control.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3232 次 |
| 最近记录: |