大侠:
   如何 避免C# Winform  MDI子窗体重复打开?

解决方案 »

  1.   


     foreach (Form childrenForm in Application.OpenForms) //判断窗体是否已经打开,如果打开则激活
                    {
                        if (childrenForm.Name == "你窗体的名称")
                        {
                            childrenForm.Visible = true;
                            childrenForm.Activate();
                            return;
                        }
                    }
                    你窗体 frm = new yhll_你窗体("", "", "F001", "0", "0");
                    frm.Show(); //没有打开,则实例化显示
      

  2.   

    你窗体 frm = new yhll_你窗体("", "", "F001", "0", "0"); 
    ==>
    前面的yhll_ 请忽略
      

  3.   


    简单点的就是这样
            private bool ShowChild(Form frm)
            {
                foreach (Form frm1 in this.MdiChildren)
                {
                    if (frm1.Text==frm.Text)
                    {
                        frm1.WindowState = FormWindowState.Maximized;
                        frm1.Show();
                        return true;
                    }
                }
                return false;
            
            }
      

  4.   

    其实可以简单到这样:            if (this.MdiChildren.OfType<Form2>().Count() > 0)
                {
                    this.MdiChildren.OfType<Form2>().First().Activate();
                }
                else
                {
                    Form2 f2 = new Form2();
                    f2.MdiParent = this;
                    f2.Show();
                }
      

  5.   

    哈哈,其实还可以通过单例模式进一步简化
      Form2 f2 = new Form2();  (这里不直接这样实例化,通过一个静态类创建单例的Form2)              
      f2.MdiParent = this;                
      f2.Show();
      

  6.   

     foreach (Form frm in this.MdiChildren)
                {
                    if (frm.Name == "已打开的窗口名称或窗口名字")
                    {
                        ........
                    }
                }
      

  7.   

            /// <summary>
            /// 判断窗体是否已打开
            /// </summary>
            private bool IsChildFormExist(Form frm)
            {
                if (frm == null) return false;
                foreach (Form childFrm in this.MdiChildren)
                {
                    //用子窗体的Name进行判断,如果存在则将他激活
                    if (childFrm.Text == frm.Text)
                    {
                        childFrm.Activate();
                        return true;
                    }
                }
                return false;
            }        /// <summary>
            /// 打开窗口
            /// </summary>
            private void ShowForm(Form frm)
            {
                frm.MdiParent = this;
                frm.Show();
            }调用事件里面:
    Form frm = null;
    if (!this.IsChildFormExist(this.frm))
                {
                    frm = new Form();
                    this.ShowForm(frm);
                }