foreach控制c#跳过控件
我有以下循环来删除我的C#Windows窗体应用程序中的按钮。 唯一的问题是它会跳过其他所有按钮。 如何从表单中删除所有按钮控件?
foreach (Control cntrl in Controls) { if(cntrl.GetType() == typeof(Button)) { Controls.Remove(cntrl); cntrl.Dispose(); } }
我认为这种方式更具可读性:
var controlsToRemove = Controls.OfType
调用ToArray()
会创建一个新的具体集合,以便您可以枚举一个并修改另一个。
感到惊讶的是,你没有错误,因为你正在迭代它时修改集合。 使用for
循环并从结尾开始:
for (int ii = Controls.Count - 1; ii >= 0; ii--) { Control cntrl = Controls[ii]; Controls.remove(cntrl); cntrl.Dispose(); }
(从最后开始,因为否则您将在迭代时更改每个控件的索引。)
你正在从你移除的同一个集合中迭代。 使用此代码:
List cleanControls = new List (); foreach(Control ctr in Controls) { if(cntrl.GetType() != typeof(Button)) { cleanControls.Add(ctr); } else { ctr.Dispose(); } } Controls = cleanControls;
而已! 希望我帮忙!