3

我正在使用 c# 开发一个 winforms 应用程序。我有一个 MDI 容器,它在左侧有一个菜单,通过按一个按钮,可以看到相应的表单。如果我单击打开 Form1 的按钮 3 次,则打开表单的 6 个实例。因此,我认为我必须编写一个处理任何其他 Form1 实例的方法。使用以下方法,我正在遍历 MDI 子项,但我需要一些帮助如何关闭除新实例之外的所有其他实例。

  public void DisposeAllButThis(Form form)
    {
        foreach (Form frm in this.MdiChildren)
        {
            if (frm == form)
            {
                frm.Dispose();
                return;
            }
        }
    }
4

6 回答 6

9

您还需要检查表单是否属于同一类型:

public void DisposeAllButThis(Form form)
{
    foreach (Form frm in this.MdiChildren)
    {
        if (frm.GetType() == form.GetType() 
            && frm != form)
        {
            frm.Dispose();
            frm.Close();
        }
    }
}

有关关闭和处置的更多信息,请参阅:C# Form.Close 与 Form.Dispose

于 2012-07-03T10:22:17.240 回答
2
public void DisposeAllButThis(Form form)
{
    foreach (Form frm in this.MdiChildren)
    {
        if (frm != form)
        {
            frm.Dispose();   
            frm.Close();          
        }
    }
    return;
}
于 2012-07-03T10:43:28.570 回答
1
foreach (Form frm in this.MdiChildren)
{
   if (frm != form)
   {
      frm.Dispose();
      return;
   }
} 
于 2012-07-03T10:20:04.240 回答
0

通过这个幻想你可以从另一个类中调用它:并注意这一点:frm.GetType() != Parent.GetType()

public void DisposeAllButThis(Form parentForm)
    {
        foreach (Form frm in Parent.MdiChildren)
        {
            if (frm.GetType() != Parent.GetType()
                && frm != Parent)
            {
                frm.Close();
            }
        }
    }
于 2013-08-21T19:31:16.730 回答
0

如果您从另一个子表单调用,您可以使用: this.DisposeAllButThis(this.FindForm());

并使用方法:

private void DisposeAllButThis(Form form)
{
    foreach (Form frm in ParentForm.MdiChildren)
    {
       if (frm != form)
       {
          frm.Dispose();
          frm.Close();
       }
    }
 }
于 2019-06-19T16:40:53.970 回答
0
private void closallforms()
        {
            foreach (Form frm in this.MdiChildren)
            {
                if (frm != Parent)
                {
                    frm.Close();
                }
            }
        }
于 2016-02-11T15:22:30.370 回答