【问题标题】:unable to bring mdi child form in front无法将 mdi 子窗体放在前面
【发布时间】:2012-08-31 11:19:43
【问题描述】:

我有一个 MDI 父表单,我在其中打开 MDI 子表单,但是如果我再次单击,我不想重新打开它们,而不是我想专注于已经打开的那个特定的 mdi 子表单,我正在通过单击我的菜单条来完成这项工作。我已经尝试了很多来成功地做到这一点,但一直都失败了。好吧,我的代码是:

这是一个方法...

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();
    }
}

【问题讨论】:

    标签: c# mdi


    【解决方案1】:

    f 仍然是你的new MyForm(),那么你期望Activateing 它会做什么?你需要得到你想要带到前面的实际表格和Activate

    此外,您可能不想创建一个新的MyForm,除非您打算使用它。

    【讨论】:

    • @Sandy.Net 看看你的代码。您正在使用 MyForm f = new MyForm() 创建一个新表单,然后尝试执行 f.Activate()...
    • 那么在这种情况下我该怎么办先生?我应该先关闭 from,然后用新实例重新打开它吗?
    • @Sandy.Net 您应该在现有 MyForm 对象上调用Activate(),而不是创建一个新对象。最好的解决方案可能是从 CheckMdiClientDuplicates 返回 MyForm,而不是 bool
    【解决方案2】:

    你应该试试这个代码:

    这是当您单击按钮以显示您的第一个表单时:

    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;
        }
    

    单击另一个表单的下一步按钮时执行相同操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多