在CheckChanged事件时关闭窗体
本文关键字:窗体 CheckChanged 事件 | 更新日期: 2023-09-27 18:05:46
我有这样一段代码,当框被选中时打开一个表单,当框未被选中时关闭它:
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
循环有关,但我想不出一种方法来代替它。谁能给点建议?
在迭代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();
并从循环中删除类型检查