【问题标题】:Winform Collection was modified; enumeration operation may not execute [duplicate]Winform Collection 被修改;枚举操作可能无法执行
【发布时间】:2016-06-06 19:33:30
【问题描述】:

我的代码是:

    private void studentToolStripMenuItem_Click(object sender, EventArgs e)
    {

        foreach (Form frm in Application.OpenForms)
        {
            if (frm.Text == "student")
            {
                frm.Activate();
            }
            else
            {
                studetn obj = new studetn();
                obj.MdiParent = this;
                obj.Dock = DockStyle.Fill;
                obj.Show();
            }
        }                                                                     
    }

【问题讨论】:

  • 您是否尝试过在循环中获取表单列表并在循环外激活它们?
  • 在决定创建一个新表单之前,您必须查看所有表单。因此,此代码已被设计为 borken。添加return,将表单创建代码移出循环。并使用 MdiChildren 属性。
  • 这里的情况发生了变化,我正在尝试检查 mdi 孩子是否已经打开,如果打开然后激活它

标签: c#


【解决方案1】:

Show() 命令修改您正在枚举的 Application.OpenForms 集合。这个不允许。您应该在 foreach 循环之外创建并显示新表单:

private void studentToolStripMenuItem_Click(object sender, EventArgs e)
{
    // Find the student form
    Form frmStudent = null;
    foreach (Form frm in Application.OpenForms)
    {
        if (frm.Text == "student")
        {
            frmStudent = frm;
            break;
        }
    }                                                                     
    // if found - activate, if not found - create
    if(frmStudent!=null)
    {
        frmStudent.Activate();
    }
    else
    {
        studetn obj = new studetn();
        obj.MdiParent = this;
        obj.Dock = DockStyle.Fill;
        obj.Show();
    }
}

【讨论】:

  • 谢谢大家终于解决了
猜你喜欢
  • 2011-09-04
  • 1970-01-01
  • 2021-02-25
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2016-11-07
相关资源
最近更新 更多