说的简单点,就是我做了一个按钮,点击就show这个子窗体,但是如果再点这个按钮的时候,因为子窗体没有关闭就会出错,我怎么点击时候判断它是否打开,如果打开就先关闭,再show.
谢谢大家!!!^_^

解决方案 »

  1.   

    if(子窗体.Visible = true)子窗体.Visible = false;
    子窗体.Show();
      

  2.   

    写错了,应该是 子窗体.Visible == true
      

  3.   

    将第二个窗体设成全局的变量,点击的时候判断
    if(f2!=null)
    {
        f2.colse();
    }
    else
    {
        f2=new form2();
        f2.show();
    }
      

  4.   

    try catch 一下吧-。- 异常捕捉一下
      

  5.   

    4L,我冒昧的问一下,那样是关闭了么?如果不是,不可以,因为我点击的时候,要传新的值的!!!6L,我想知道再form1里怎么设置一个f2,不好意思啊,我比较笨!!!
      

  6.   

    private Form1 frm1;
     if (frm1 == null || frm1.IsDisposed == true)
                {
                    frm1 = new 产品信息();
                    frm1.Show(this);
                }
                else
                {
                    frm1.Activate();
                    frm1.Show();
                }
      

  7.   

    用Form的Name去找。然后再做判断
      

  8.   

    7L,是不是先try{实力化form2}  catch{关闭form2,再实力化}是这样么???
      

  9.   

    测试下:public void button1_Click(object sender, EventArgs e)
    {
        Form[] f = this.OwnedForms;//获取子窗体
        foreach (Form f1 in f)//遍历子窗体
        {
            if (f1 is Form2)//如果是Form2
                f1.Close(); 
        }    Form2 fm = new Form2();
        fm.Show(this);
    }
      

  10.   

    不要随便设置全局变量,那是种资源浪费。.net已经提供了获取子窗体的方法,在Show(this)时候定义拥有者窗体,然后this.OwnedForms获取子窗体,遍历子窗体就可以了。
      

  11.   

    在Form1中定义一下
    private Form f2=null;
      

  12.   

    如果在子窗口的集合里面判断的话可以订购HandleCreated事件。
      

  13.   

    许多人会设置一些全局变量,这的确有时候会方便些,但是不必要的全局变量会打乱整个程序的结构性,如果你会用反射的相关知识,这会是非常容易解决的。即使不用反射,基本.net平台的方法起码要掌握。即使没有掌握,临场发掘也是非常重要的。
      

  14.   

    12L的不行,为什么我打开了f3,this.OwnedForms获取子窗体的个数还是null呢?我再试试16L的!
      

  15.   

    fm.Show(this); 你有这个吗?红色的
      

  16.   

    16L啊,
    foreach (Form form2 in Application.OpenForms)
                    {
                        if (form2.Name == "Form3")
                        {
                           //这里怎么关闭打开的form3窗体啊?
                        }
                        
                    }
                    Form3 form = new Form3(str);                form.Show();
      

  17.   

    20,你别生气,不是this的问题,是即使打开了form2,this.OwnedForms的维数还是0!就这样!!!
      

  18.   


            Private Frm2 GetFrm2()
            {
                 if (Frm1.frm2 != null)
                {                
                    Frm1.frm2.Close();                
                }            Frm2 frm2 = new Frm2();
                
                Frm1.frm2 = frm2;
                return frm2;
            }
      

  19.   

     //遍历主窗口上的所有子菜单 
    for (int i = 0; i < this.MdiChildren.Length; i++)
    {            
          string s=this.MdiChildren[i].Tag.ToString().ToLower();                         
           if (== or.FormInstance.ToLower()) { 
              //打开了
           }ELSE{ 
              //没打开
          }
    }
      

  20.   


                bool temp = false;
                foreach (Form form in Application.OpenForms)
                {
                    if (form.Name == "form2")
                    {
                        temp = true;
                        form.Focus();//这就是让那个窗体弹出来,至于其他的操作你也可以写在这里面
                        //return;//return or break
                    }
                }
                if (!temp)
                {
                    form2 f2= new form2();
                    f2.Show();
                }