如何判断该窗体已经存在?如果存在则激活该窗体,不存在则new一个??? 在new窗体时,如何判断时候已经存在着该窗体,如果存在则只需要激活该窗体就行了,不存在就需要重新new一个并show出来!!!请问:如何判断窗体是否存在呢!!? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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(); } } CSDNATM(青蛙【自娱自乐】) ,我不是采用的mdi的模式,所以没有parent和midchild的关系可以找。所以你的方法恐怕不行! hamadou(闵峰),你说采用单件模式是什么意思????请说详细点! 去掉这句:newfrom .MdiParent = this; CSDNATM(青蛙【自娱自乐】) ,还是不行,Form[] fms = this.MdiChildren;这一句是获取他的子窗体,但是我不是用的MDI所以这里的fms.length始终为0请指教———————— 直接使用Form 的Created属性Form form1 = new Form();.....if(form1.Created){ //存在 form1.Show();}else{ //不存在 form1 = new Form(); form1.Show();} 试看看! dazhu2,关于使用API如何实现能否给个实例代码看看! s198127(xyz) ,在代码中Form form1 = new Form(); //这里new了一次了 .....if(form1.Created) //这里始终真????{ //存在 form1.Show();}else{ //不存在 form1 = new Form(); form1.Show();} 你的需求可以考虑单例模式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;}只是一个例子,可以参考一下 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(); 不好意思,可能是我的需求说的不够清楚!我说清楚点: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里面的给某人发送消息的发送消息窗体。如果有一个同这个人的聊天窗体,就不会重新创建,只是激活窗体,如果没有就创建一个。请问:这个判断怎么进行。???? "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(); 在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中移除! 对了,应该这样,Form2._htFormText.Add("aa",frm),这样方便点! 真是.................那个Hashtable 放在哪里都可以,不一定要放在Form2中!看看单件模式的定义,什么叫单件模式? try {新建}catch {激活}这样行吗? try {激活}catch {新建}还是这样好一点 单件模式,就是一个类只能被实例化一次?????但是我不是说只能被激活一次,我说得是符合特定条件的实例只能有一个,但是这个窗体实例可能有多个。比如我要求form.text这个属性的值是唯一的,就是说form.text相同的实例窗体不能被创建,但是form.text不同的窗体可以被创建多次。 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里面的给某人发送消息的发送消息窗体。如果有一个同这个人的聊天窗体,就不会重新创建,只是激活窗体,如果没有就创建一个。 在Form2中定一个sNamepublic static string Names;每new一个Form就把名字保存下来Form2.Names + ="name";当关掉窗体时Form2.Names - ="name";在创建窗体时先在Names看看能不能找到;找到显示,找不到new一个。 使用API函数FindWindow,如果返回值大于0则存在该窗体 yinshuhai (因数还) 你看了我写的代码了么?看懂了么?我中间不是写了一个哈希表么,不就是为了存放实例窗体的对象的么,当你需要访问或者新建该窗体实例时,先搜索哈希表中是否有相关的对象,假如有,找到该对象,假如没有,重新new 一个 abiho(橡木) 的方法应该能满足楼主的要求 使用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() {}} Form2 fm=new Form2();fm.text=“aa”;// 判断fm是不是已引用了一个窗体实例if(fm!=null) fm = new Form2();fm.text=“bb”; abiho(橡木),你的代码我看了,但是我不熟悉哈希表,我可以遍历到这个哈希表中的记录,可以找到哈希表中values为"aa"是的值,但是,我不知道怎么将记录在哈希表中的窗体激活并显示出来?请赐教______//遍历.htFormText,得到Form2对象 如何实现. 最笨的办法,定义一个变量!New第一次设为1,第二次就……还有就是获取句柄了,这个就不知道了。 http://community.csdn.net/Expert/topic/3922/3922454.xml?temp=.4562189 请教:类库(DLL)怎么加密?? 报表打印问题. xml与数据库的问题 .net调用delphi的dll 的问题 如何获得TABPAGE里面的窗口对象? 高分求一个DataGrid控件:标题允许多行显示,有源代码最好,小弟急用,拜托各位了 企业在购服务器时,只是购它的硬件吗? 【急切求助】帮忙区别C++和C#中的null和""(空字符串)? 如何隐藏datagrid中系统的右击菜单 如何引用一个dll文件? c#开发winform程序,让winform象qq一样可以自动隐藏,在用鼠标靠近时又可以显示出来! 火急求助:是不是IIS或者.NET出问题了,在线等待各位大侠的支援~~~
{
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();
} }
hamadou(闵峰),你说采用单件模式是什么意思????请说详细点!
newfrom .MdiParent = this;
请指教————————
if(form1.Created)
{
//存在
form1.Show();
}
else
{
//不存在
form1 = new Form();
form1.Show();
}
dazhu2,关于使用API如何实现能否给个实例代码看看!
Form form1 = new Form(); //这里new了一次了
.....
if(form1.Created) //这里始终真????
{
//存在
form1.Show();
}
else
{
//不存在
form1 = new Form();
form1.Show();
}
private object obj = new object();public static Form GetForm()
{
if (form1==null)
{
lock(this)
{
lock(obj)
{
form1 = new Form();
}
}
}
return form1;
}只是一个例子,可以参考一下
{
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();
我说清楚点:
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里面的给某人发送消息的发送消息窗体。如果有一个同这个人的聊天窗体,就不会重新创建,只是激活窗体,如果没有就创建一个。
请问:这个判断怎么进行。????
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();
先判断是否存在"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中移除!
看看单件模式的定义,什么叫单件模式?
{新建}
catch
{激活}这样行吗?
{激活}
catch
{新建}还是这样好一点
但是我不是说只能被激活一次,我说得是符合特定条件的实例只能有一个,但是这个窗体实例可能有多个。比如我要求form.text这个属性的值是唯一的,就是说form.text相同的实例窗体不能被创建,但是form.text不同的窗体可以被创建多次。
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里面的给某人发送消息的发送消息窗体。如果有一个同这个人的聊天窗体,就不会重新创建,只是激活窗体,如果没有就创建一个。
public static string Names;
每new一个Form就把名字保存下来
Form2.Names + ="name";
当关掉窗体时
Form2.Names - ="name";
在创建窗体时先在Names看看能不能找到;找到显示,找不到new一个。
你看了我写的代码了么?
看懂了么?我中间不是写了一个哈希表么,不就是为了存放实例窗体的对象的么,当你需要访问或者新建该窗体实例时,先搜索哈希表中是否有相关的对象,假如有,找到该对象,假如没有,重新new 一个
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()
{}
}
fm.text=“aa”;// 判断fm是不是已引用了一个窗体实例
if(fm!=null)
fm = new Form2();fm.text=“bb”;
请赐教______
//遍历.htFormText,得到Form2对象 如何实现.
New第一次设为1,第二次就……还有就是获取句柄了,这个就不知道了。