一个小问题:如何确定一个form已经在MDI窗口打开了。 
MDI窗口的一个菜单项对应打开一个名为form1.cs的窗口 
每次点击MDI窗口的这个菜单项时,都会打开一个新的form1.cs窗口。 
怎样能判断这个窗口已经打开,并激活它呢? 

解决方案 »

  1.   

    在菜单项的事件中写入:
        foreach (Form childfrm in this.MdiChildren)
        {
            if (childform.Name == "form1")
            {
                childfrm.Activate();
                return;
            }
        }
        form1 newfrm = new form1();
        newfrm.MdiParent = this;
        newfrm.Show();
      

  2.   

    我试了,不行呀,一次只能打开一个窗口,当打开一个子窗口后再打开其它子窗口就会出错。我的意思是比如我有四个子窗口:form1,form2,form3,form4,怎样使每个窗口只有一个实例???
      

  3.   

    我通常是这样:
    private bool IsCreated(string formName)
    {
        bool result=false;
        Form form=null;
        for (int i=0;i<this.MdiChildren.Length;i++)
        {
             form=(Form)this.MdiChildren[i];
             if (form.Name==formName)
             {
                  result=true;
                  break;
             } 
        }
    }用的时候这样
    if (this.IsCreated("Form1") == false)
    {
        form1=new  Form1();   //form1在MDI中定义
        form1.MdiParent = this;
        form1.Show();
    }
    else
    {
        form1.Focus();
    }
      

  4.   

    //-----------------查询一个子窗体是否存在----------------
    public bool checkChildFrmExist(string childFrmName)
    {
    foreach(Form childFrm in this.MdiChildren)
    {
    //用子窗体的Name进行判断,如果已经存在则将他激活
    if(childFrm.Name == childFrmName)
    {
    if(childFrm.WindowState == FormWindowState.Minimized)
    childFrm.WindowState = FormWindowState.Normal;
    childFrm.Activate();
    return true;
    }
    }
    return false;
    } if (this.checkChildFrmExist("subjmanage") == true)
    {
    return;
    }
    // 如果该窗体不存在则新生成一个窗体
    subjmanage formsubjmanage = new subjmanage();
    formsubjmanage.MdiParent = this;
    formsubjmanage.Show();
      

  5.   

    //-----------------查询一个子窗体是否存在----------------
    public bool checkChildFrmExist(string childFrmName)
    {
    foreach(Form childFrm in this.MdiChildren)
    {
    //用子窗体的Name进行判断,如果已经存在则将他激活
    if(childFrm.Name == childFrmName)
    {
    if(childFrm.WindowState == FormWindowState.Minimized)
    childFrm.WindowState = FormWindowState.Normal;
    childFrm.Activate();
    return true;
    }
    }
    return false;
    }
    你然后再在需要检查子窗体的地方写入下代码
    if (this.checkChildFrmExist("subjmanage") == true)
    {
    return;
    }
    // 如果该窗体不存在则新生成一个窗体
    subjmanage formsubjmanage = new subjmanage();
    formsubjmanage.MdiParent = this;
    formsubjmanage.Show();