foreach control c# skipping controls
我有以下循环来删除我的C Windows窗体应用程序中的按钮。唯一的问题是它跳过了其他按钮。如何从窗体中删除所有按钮控件?
1 2 3 4 5 6 7 8 | foreach (Control cntrl in Controls) { if(cntrl.GetType() == typeof(Button)) { Controls.Remove(cntrl); cntrl.Dispose(); } } |
我觉得这样更易读一点:
1 2 3 4 5 6 | var controlsToRemove = Controls.OfType<Button>().ToArray(); foreach (var control in controlsToRemove) { Controls.Remove(control); cntrl.Dispose(); } |
号
调用
令人惊讶的是,这并没有使您出错,因为您在迭代集合时正在修改它。使用
1 2 3 4 5 6 | for (int ii = Controls.Count - 1; ii >= 0; ii--) { Control cntrl = Controls[ii]; Controls.remove(cntrl); cntrl.Dispose(); } |
(从结尾开始,因为在迭代时,您将更改每个控件的索引。)
您正在从要删除的地方迭代相同的集合。使用此代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
就这样!希望我能帮忙!