无法将mdi子窗体放在前面

  • 本文关键字:窗体 在前面 mdi c# mdi
  • 更新时间 :
  • 英文 :


我有一个MDI父窗体,我在其中打开MDI子窗体,但如果我单击其他时间,我不想重新打开它们,而不是我想专注于已经打开的特定MDI-Child窗体,我是通过单击菜单条来完成这项工作的。我已经尝试了很多成功的方法,但是一直都失败了。我的代码是:

这是一种方法。。。

private bool CheckMdiClientDuplicates(string WndCls)
{
    Form[] mdichld = this.MdiChildren;
    if (this.MdiChildren.Length == 0)
    {
        return true;
    }
    foreach (Form selfm in mdichld)
    {
        string str = selfm.Name;
        str = str.IndexOf(WndCls).ToString();
        if (str != "-1")
        {
            return true;
        }
    }
    return false;
}

我正在通过…实现这个方法。。。

private void myToolStripMenuItem_Click(object sender, EventArgs e)
{
    MyForm f = new MyForm();//MyForm is the form on which i am working
    if (CheckMdiClientDuplicates("MyNamespace.MyForm") == true)
    {
        f.MdiParent = this;
        f.Show();
    }
    else
    {
        f.Activate();
        f.BringToFront();
    }
}

f仍然是您的new MyForm(),那么您希望Activate能做什么呢?你需要得到你想带到前台的实际表格,然后Activate

此外,您可能不想制作新的MyForm,除非您打算使用它。

您应该尝试以下代码:

这是当你点击第一个表单出现的按钮时:

private void button1_click(object sender, EventArgs e){
        Form1 f1 = null;
        if (IsFormAlreadyOpen(typeof(Form1)) == null)
        {
            if (ActiveMdiChild != null)
            {
                ActiveMdiChild.Close();
            }
            f1 = new Form1();
            f1.MdiParent = this;
            f1.Show();
        }
}

方法:

public static Form IsFormAlreadyOpen(Type FormType)
    {
        foreach (Form OpenForm in Application.OpenForms)
        {
            if (OpenForm.GetType() == FormType)
                return OpenForm;
        }
        return null;
    }

当您单击另一个表单的下一个按钮时也要执行同样的操作。

最新更新