form_1 frm=new form_1();
frm.show;(因为是用户控件,只能用show)用户在多次点了之后,会建立多个frm,怎么防止这个问题?

解决方案 »

  1.   

    new之前,看是否有这个实例
    用api:FindWindow 
    有则不new
      

  2.   

    if( frm != null && frm.Created )
    {
        frm.Focus();
        return;
    }
    frm = new form_1();
    frm.show();
      

  3.   

    TO: zhongwanli
    在你写的这段代码之前就需要实例化form_1不然frm.created是不可用的,出错所以还是不行,下面通不过,因为frm.created之前需要frm=new from_1() 如果这样了,就已建立了多个form_1 怎么办呢?
    *****************
    form_1 frmif( frm != null && frm.Created )
    {
        frm.Focus();
        return;
    }
    frm = new form_1();
    frm.show();
      

  4.   

    第一次運行的時候
    if(第一次運行)
    {
       frm = new form_1();
    }
    else
    {
       if( frm != null && frm.Created )
    {
        frm.Focus();
        return;
    }
    frm = new form_1();
    frm.show();}不就行了
      

  5.   

    第一次運行的時候
    if(第一次運行)
    {
       frm = new form_1();
    }
    else
    {
       if( frm != null && frm.Created )
    {
        frm.Focus();
        return;
    }
    else
    {
    frm = new form_1();
    frm.show();
    }
    }不就行了
      

  6.   

    public class app
    {
    Form1 form1;
    buttonOpen_Click(object sender,....)
    {
    if (form1 == null)
    {
    form1 = new Form1(this);
    }
    form1.Show();
    }
    }
    public class Form1
    {
    Form parent;
    Form1(Form parentP)
    {
    parent = parentP;
    }
    Form1_Closed()
    {
    parent.form1 = null;
    }
    }
      

  7.   

    最好的是把窗口做成单件模式(singleton)
      

  8.   

    哎哟,用bool型静态变量不就可以了么?
    打开的同时赋值true,关闭赋值false。发现现在true就不打开。
      

  9.   

    Form2 frm ;//声明为全局变量。
                               if ((frm!=null) && (!frm.IsDisposed ))
    {
    //如果frm不为空或者没有释放,就激活frm
    frm.Activate() ;
    frm.WindowState=FormWindowState.Normal;
    return;
    }
    //否则新建实例,并show();
    frm =new Form2 ();
    frm.Show();
      

  10.   

    mdi下这样做可以的
    Form2 fm=null;
    foreach(Form f in this.mdichilden)
    {
     if(f is Form2)
      {fm=(Form2)f;break;}
    }
    if(fm!=null)
    {}
    else{}
      

  11.   

    to:tl_pear(飘叶寻梦)
    你写的只有在用户点了一次后就不会有错,第一次点时会报错的,因为frm.IsDisposed之前得new这个,不然就会有错to:xiaomatian(趴趴熊◎%#……※×) 
    我不是mid
      

  12.   

    直接使用
     zhongwanli(一心只为做民工。头!!!!) 
    提出的方案
    .. Class
    {
       Form1 form1 = new Form1();
       .....
       if(form1.Created)
       {
          form1.Activate();
        }
       else
       { 
          form1 = new Form1();
          form1.show();
       }
    }
    如果你还是不放心的话可以自己跟踪一下程序看第一次运行是否会执行
       else
       { 
          form1 = new Form1();
          form1.show();
       }
      

  13.   

    如果你用的不是MDI窗体,这个问题,你用全局变量,问题就能解决......
      

  14.   

    public MyForm:Form
    {
     protected MyForm()
     {
      ...
     } private static MyForm myForm = null; public static MyForm GetInstance()
     {
      if(MyForm.myForm == null)
      {
       MyForm.myForm = new MyForm();
      }
      return MyForm.myForm;
     }
    }// How to use:
    MyForm mf = MyForm.GetInstance();