我现在就是在父窗口中,可以同时打开同一个子窗口很多次,每按一次总是弹出一个。
如何让子窗体只能同时打开一个而不是多个?

解决方案 »

  1.   

    bool bOpen = false;
                foreach (Form frmOpen in this.MdiChildren)
                {
                    if (frmOpen.Name == frmForm1.Name)
                    {
                        frmOpen.Activate();
                        frmOpen.WindowState = FormWindowState.Maximized;
                        bOpen = true;
                        break;
                    }
                }
                if (bOpen == false)
                {
                    frmForm1.MdiParent = this;
                    frmForm1.Show();
                    frmForm1.WindowState = FormWindowState.Maximized;
                }
      

  2.   

    系统设置_Click:if (this.ActiveMdiChild == null)
    {
         XXX X=new XXX();X.Show();
    }
    else
    {
         MessageBox.Show("只能打开一个", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }
      

  3.   


    private void button1_Click(object sender, EventArgs e)
    {
        foreach (Form frm in this.MdiChildren)
        {
            if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
        }
        Form2 frm2 = new Form2();
        frm2.MdiParent = this;
        frm2.Show();
    }
      

  4.   

    用一个List保存所有打开的窗口的名字List<string> listForm = new List<string>();
                //每次打开窗体前检查
                if (listForm.Contains("Form1"))
                {
                    MessageBox.Show("Form1窗体已经打了");
                    return;
                }
                else
                {
                    Form f = new Form();
                    f.Name = "";
                    listForm.Add(f.Name);
                    f.Show();
                }
      

  5.   

    Form2 frm2 = new Form2();
    frm2.MdiParent = this;
    frm2.Show();你原来MDI主窗口中执行上面代码的位置
    用下面代码替换foreach (Form frm in this.MdiChildren)
    {
        if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
    }
    Form2 frm2 = new Form2();
    frm2.MdiParent = this;
    frm2.Show();
      

  6.   

    楼主,你搞错了,你定义了局部变量所以每点一次就实例化一个,也就是 xx a=new xx();所以为了你可以每次只能点一个窗口出来,你可以在方法外面定义一个xx a=new xx();然后在方法里面写a.show();还有一个办法是不要a.show(),而是a.shoudialog();
      

  7.   

    foreach(form frm in MDICHILDFORM)
    {
    if(frm is Form1)
    frm.active();
    else
    {
    Form1 frm1=new form1();
    frm1.show();
    }
    }
    好象可以的
      

  8.   

    忘写这行了frm1.MdiParent = this;
      

  9.   

    1楼就可以啊,弄那么复杂干嘛?
    6楼用一个List保存打开的窗口,不麻烦吗?这样每次关闭窗口的时候还要从List中移除打开的窗口,个人觉得麻烦。1楼的方法简单可行!