在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循环有关,但我想不出一种方法来代替它。谁能给点建议?

在CheckChanged事件时关闭窗体

在迭代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();

并从循环中删除类型检查