C#窗体来回切换的小问题
在WinForm中,有2个窗体,
比如是frm1(主窗体)和frm2。
在frm2上有一个按钮btn2,然后显示frm1。
在frm1上有一个按钮btn1,然后显示frm2。
如果在btn2_Click中写
frm1 m_frm1 = new frm1();
m_frm1.show();
多次点击,会产生很多个frm1的副本。
同理,按照上述方法,也会产生多个frm2的副本。
我想始终只有1个frm1和frm2副本
并且能相互调用,应该如何处理?
我猜想如果把frm2 m_frm2 = new frm2();定义放在类定义里面,
这个样只有1个frm2的副本。对于frm2可以这样做,但是对于frm1,已经产生一个实例了。
所以还是不行。
我又试着把Applicaition.Run(m_frm2);编译器报错。
初学C#,搜索了以前的帖子也没找到,希望大家帮忙。
问题点数:50、回复次数:8Top
1 楼lovvver(ElephantTalk.Bright)回复于 2006-06-02 17:37:27 得分 2
由于两个窗体是主从关系,所以很难做到你要求的这样。至于产生多个副本问题,是可以解决的。Top
2 楼jijl2001(jijl2001)回复于 2006-06-02 17:37:42 得分 2
用单例模式Top
3 楼bhwhy(苏秦)回复于 2006-06-02 17:38:26 得分 2
用hide能满足吗Top
4 楼amandag(高歌)回复于 2006-06-02 17:43:45 得分 6
每次显示窗体的时候,先判断一下时候此窗体与已经打开的窗体标题是否相同,如果相同,则只将此窗体激活。
前两天刚见到VB.NET的写法,找到了帖上来Top
5 楼lovejxl(CapTsubasa)回复于 2006-06-02 18:38:32 得分 20
在form2类里定义一个form1类的成员f1,并写个set方法如:private void setform(Form f){f1=f;},在form1类里定义一个form2类的成员f2,在form1_load事件里实例化f2,并调用set方法:f2.setform(this)
然后,在button1事件里写:this.Hide();f2.Show();
在button2的事件里写:this.Hide();f1.Show();Top
6 楼zdf9218(众里寻丫千百度, 丫儿却在灯火阑珊处)回复于 2006-06-02 19:46:29 得分 18
传说中的单件模式
public class Form1 : System.Windows.Forms.Form
{
private static Form1 fm=null;
private Form1()
{
InitializeComponent();
}
public static Form1 Instince()
{
if(fm==null)
{
fm=new Form1();
return fm;
}
else
return fm;
}
}
两个Form都这么写
在button事件里写:Form1 fm1=Form1.Instince();fm1.show();Top
7 楼szn(Hammer)回复于 2006-06-02 19:54:47 得分 0
lovejxl(CapTsubasa)的方法是可行的
但是SetForm方法要改为
public void SetForm(Form1 f)
{
f1 = f;
}
不然类型不匹配
基本思想就是把已经生成的form实例作为参数传递过去。
居然自己没想到,鄙视下自己。Top
8 楼szn(Hammer)回复于 2006-06-02 20:10:11 得分 0
to: zdf9218()
“传说中的单件模式”
思想就是在实例化的时候判断下是否已经有这个实例了。
这个也是可行的。
Top




