【问题标题】:close the form from mdi parent when i click to open any other form当我单击打开任何其他表单时,从 mdi 父级关闭表单
【发布时间】:2011-03-26 12:24:26
【问题描述】:

我有一个 mdi 表单,并且有很多其他表单与菜单条链接。当我单击任何其他菜单项时,mdi 父表单内应该有关闭以前打开的表单。

【问题讨论】:

    标签: c#


    【解决方案1】:

    这是关闭所有 MdiChild 表单的更简洁、现代和外科手术的方法:

    static void CloseAllMdiChildForms()
    {
        foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // ToArray necessary to build a snapshot
            form.Close();
    }
    

    但是,听起来您想要在任何给定时间只打开一个子表单。如果是这种情况,MDI 就不是适合这项工作的工具。您可以构建 UserControls 并将它们交换到您的主应用程序表单中。

    【讨论】:

    • 看到我有一个管理员表单,在这个表单中有很多菜单项,并且都会打开一个新表单。但是打开一个新的,当我再次打开一个新的表单时,新的表单将打开,但旧的表单不会关闭。管理员表单中打开了许多表单。当我点击菜单项打开任何表单时,我希望其他表单应该关闭。
    • @vivek:我不清楚您的具体要求是什么,但菜单项的点击处理程序没有任何魔力。你必须编写在那里执行的代码,这样你就可以做任何你想做的事情。
    【解决方案2】:

    当你想打开一个新表单时调用这个方法:

    private void CloseAllForms()
    {
        Form[] formToClose = null;
        int i = 1;
        foreach (Form form in Application.OpenForms)
        {
            if (form != this) //this is form1
            {
                Array.Resize(ref formToClose, i);
                formToClose[i - 1] = form;
                i++;
            }
        }
        if (formToClose != null)
            for (int j = 0; j < formToClose.Length; j++)
                formToClose[j].Dispose();
    }
    

    米加

    【讨论】:

    • Array.Resize 真的吗?使用动态大小的容器,例如 List&lt;Form&gt;
    【解决方案3】:

    这是最好的:

    static void CloseAllMdiChildForms()
    {
        foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // The ToArray is necessary to build a snapshot
        form.Close();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-04-09
      • 2018-09-29
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 1970-01-01
      相关资源
      最近更新 更多