在new窗体时,如何判断时候已经存在着该窗体,如果存在则只需要激活该窗体就行了,不存在就需要重新new一个并show出来!!!
请问:如何判断窗体是否存在呢!!?

解决方案 »

  1.   

    form newfrom = new from();public void OnShowfrmPlease()
    {
    Form[] fms = this.MdiChildren;
    bool lbl_exist=false; for(int i=0; i < fms.Length; i++)
    {
    if (fms[i] is frm_dtgd)
    {
    fms[i].Show();
    fms[i].Activate();
    lbl_exist=true;
    break;
    }
    } if(!lbl_exist)
    {
    newfrom =new frm_please();
    newfrom .MdiParent = this;
    newfrom .Show();
    } }
      

  2.   

    CSDNATM(青蛙【自娱自乐】) ,我不是采用的mdi的模式,所以没有parent和midchild的关系可以找。所以你的方法恐怕不行!
     hamadou(闵峰),你说采用单件模式是什么意思????请说详细点!
      

  3.   

    去掉这句:
    newfrom .MdiParent = this;
      

  4.   

    CSDNATM(青蛙【自娱自乐】) ,还是不行,Form[] fms = this.MdiChildren;这一句是获取他的子窗体,但是我不是用的MDI所以这里的fms.length始终为0
    请指教————————
      

  5.   

    直接使用Form 的Created属性Form form1 = new Form();.....
    if(form1.Created)
    {
      //存在
      form1.Show();
    }
    else
    {
      //不存在
      form1 = new Form();
      form1.Show();
    }
      

  6.   

    试看看!
     dazhu2,关于使用API如何实现能否给个实例代码看看!
      

  7.   

    s198127(xyz) ,在代码中
    Form form1 = new Form();   //这里new了一次了
                       
    .....
    if(form1.Created)          //这里始终真????
    {
      //存在
      form1.Show();
    }
    else
    {
      //不存在
      form1 = new Form();  
      form1.Show();
    }
      

  8.   

    你的需求可以考虑单例模式private static Form form1;
    private object obj = new object();public static Form GetForm()
    {
        if (form1==null)
        {
           lock(this)
           {
               lock(obj)
               {
                   form1 = new Form();
               }
           }
        }
        return  form1;
    }只是一个例子,可以参考一下
      

  9.   

    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();
      

  10.   

    不好意思,可能是我的需求说的不够清楚!
    我说清楚点:
    Form1 为主窗体 在Form1中创建Form2
     Form2 fm=new Form2();
       fm.text=“aa”;
      Form2 fm=new Form2();
        fm.text=“bb”;
    现在已经存在着text分别为aa,bb的两个Form2的实体,
    如果现在再要创建form.text=“aa”的Form2实体,则检测到系统中已经存在着一个,不需创建,激活就行了。
    如果现在再要创建form.text=“cc”的Form2实体,则检测到系统中不存在,需创建,就要重新new一个。
    就像QQ里面的给某人发送消息的发送消息窗体。如果有一个同这个人的聊天窗体,就不会重新创建,只是激活窗体,如果没有就创建一个。
    请问:这个判断怎么进行。????
      

  11.   

    "vrace(干什么呢?在写程序!)"写的
    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();
    是正解。你的窗体都用MyForm这个类来创建就行了。
    最后加一句mf.Show();
      

  12.   

    在Form2中定一个Hashtablepublic static Hashtable _htFormText=new Hashtable();.....创建窗体时
    先判断是否存在"aa",
    if(!Form2._htFormText.ContainsValue("aa"))
    {
       Form2 frm=new Form2();
       frm.Text="aa";
       Form2._htFormText.Add(frm,"aa");
    }
    else
    {
       //遍历.htFormText,得到Form2对象
    }差不多了吧,Form2关闭的时候记得把相关的key-value在.htFormText中移除!
      

  13.   

    对了,应该这样,Form2._htFormText.Add("aa",frm),这样方便点!
      

  14.   

    真是.................那个Hashtable 放在哪里都可以,不一定要放在Form2中!
    看看单件模式的定义,什么叫单件模式?
      

  15.   

    try
      {新建}
    catch
      {激活}这样行吗?
      

  16.   

    try
      {激活}
    catch
      {新建}还是这样好一点
      

  17.   

    单件模式,就是一个类只能被实例化一次?????
    但是我不是说只能被激活一次,我说得是符合特定条件的实例只能有一个,但是这个窗体实例可能有多个。比如我要求form.text这个属性的值是唯一的,就是说form.text相同的实例窗体不能被创建,但是form.text不同的窗体可以被创建多次。
      

  18.   

    Form1 为主窗体 在Form1中创建Form2
     Form2 fm=new Form2();
       fm.text=“aa”;
      Form2 fm=new Form2();
        fm.text=“bb”;// 可以被实例化
    如果:
     Form2 fm=new Form2();
       fm.text=“aa”;//不能实例化,但是如何判断是否能够实例化呢!
    现在已经存在着text分别为aa,bb的两个Form2的实体,
    如果现在再要创建form.text=“aa”的Form2实体,则检测到系统中已经存在着一个,不需创建,激活就行了。
    如果现在再要创建form.text=“cc”的Form2实体,则检测到系统中不存在,需创建,就要重新new一个。
    就像QQ里面的给某人发送消息的发送消息窗体。如果有一个同这个人的聊天窗体,就不会重新创建,只是激活窗体,如果没有就创建一个。
      

  19.   

    在Form2中定一个sName
    public static string Names;
    每new一个Form就把名字保存下来
    Form2.Names + ="name";
    当关掉窗体时
    Form2.Names - ="name";
    在创建窗体时先在Names看看能不能找到;找到显示,找不到new一个。
      

  20.   

    使用API函数FindWindow,如果返回值大于0则存在该窗体
      

  21.   

    yinshuhai (因数还) 
    你看了我写的代码了么?
    看懂了么?我中间不是写了一个哈希表么,不就是为了存放实例窗体的对象的么,当你需要访问或者新建该窗体实例时,先搜索哈希表中是否有相关的对象,假如有,找到该对象,假如没有,重新new 一个
      

  22.   

    abiho(橡木) 的方法应该能满足楼主的要求
      

  23.   

    使用Singleton模式
    class Form1
    {
        static private Form _form = null;
        static public Instance()
        {
             if(this._form == null)
             {
                  Form1._form = new Form1();
                  return Form1._form;
             }
             else
             {
                  return Form1._form;
             }
        }
        
        privte Form1()
        {}
    }
      

  24.   

    Form2 fm=new Form2();
    fm.text=“aa”;// 判断fm是不是已引用了一个窗体实例
    if(fm!=null)
        fm = new Form2();fm.text=“bb”;
      

  25.   

    abiho(橡木),你的代码我看了,但是我不熟悉哈希表,我可以遍历到这个哈希表中的记录,可以找到哈希表中values为"aa"是的值,但是,我不知道怎么将记录在哈希表中的窗体激活并显示出来?
    请赐教______
    //遍历.htFormText,得到Form2对象 如何实现.
      

  26.   

    最笨的办法,定义一个变量!
    New第一次设为1,第二次就……还有就是获取句柄了,这个就不知道了。
      

  27.   

    http://community.csdn.net/Expert/topic/3922/3922454.xml?temp=.4562189