我有这段代码,在选中此框时打开一个表单,然后在取消选中该框时关闭它:
private void chkDupe_CheckedChanged(object sender, EventArgs e)
{
if (chkDupe.Checked == true)
{
input = 1;
CableID_Controller.ShowDuplicateView(Main_Menu, this);
}
else if (chkDupe.Checked == false)
{
// Close form.
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm is CableID_DuplicateView)
{
frm.Close();
}
}
}
}
它打开表单很好,但是当我取消选中该框时,我收到错误:
出现InvalidOperationException 即可。收藏被修改;枚举可能无法执行。
我知道这与foreach
循环有关,但我无法想出用其他东西替代它的方法。任何人都可以提供任何建议吗?
答案 0 :(得分:1)
您在迭代时正在修改Application.OpenForms
集合。您需要先创建一个副本,然后迭代该副本而不是原始集合
var fc = Application.OpenForms.OfType<Form>().ToList();
此外,如果您只想关闭CableID_DuplicateView
表单,可以使用:
var fc = Application.OpenForms.OfType<CableID_DuplicateView>().ToList();
foreach (Form frm in fc)
frm.Close();
并从循环中删除类型检查。