主题:[讨论]C#关闭当前窗体打开另一窗体
nieshoushuai
[专家分:100] 发布于 2007-10-10 13:44:00
有两个窗体form1,form2.我的意思是当关闭form1时,打开form2。我写的代码是:
this.hide();
form2 f2=new form2();
form2.show();
//
但是form1还驻留在内存中,我想有把form1完全释放掉,该怎么办呢?
回复列表 (共13个回复)
沙发
wxnetsharp [专家分:0] 发布于 2007-10-10 15:15:00
hide():只是隐藏窗体,并未释放相关资源。
close():关闭窗体并释放相关资源。
板凳
nieshoushuai [专家分:100] 发布于 2007-10-10 18:04:00
我的意思是把form1释放,然后打开form2
3 楼
wxnetsharp [专家分:0] 发布于 2007-10-10 20:57:00
this.hide(); //隐藏form1
form2 f2=new form2();
form2.show(); //显示form2
this.close(); //关掉form1
=================================================
现执行了
form1.close();
下面是不执行的
form2 f2=new form2();
form2.show(); //显示form2
4 楼
nieshoushuai [专家分:100] 发布于 2007-10-11 08:02:00
[i]this.hide(); //隐藏form1
form2 f2=new form2();
form2.show(); //显示form2
this.close(); //关掉form1[/i]
这是不行的,
this.close(); //关掉form1---这一句中的this指向的是form2,
this.close();其实是把form2关掉了。
因为this指针是指向当前的窗体的。
5 楼
wxnetsharp [专家分:0] 发布于 2007-10-11 10:21:00
.net2.0中窗体的FormClosing事件,在Form1.Close()或窗体右上角的关闭按钮时触发Form1窗体的FormClosing事件,如:
private void button1_Click(object sender, EventArgs e)
{
this.Close(); //this指Form1窗体
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
Form2 f2 = new Form2();
f2.Show();
}
前提是程序的入口在Main()不在Form1窗体中,否则关闭Form1整个程序也关掉了!
6 楼
xiaohaokof [专家分:1760] 发布于 2007-10-11 18:25:00
或者 可 以 试 试 form.showdiagio();
这 样 子 可 以 将 调 用 的 窗 口 hide(),
而 只 显 示 被 调 用 的 窗 口 ...
7 楼
tujun [专家分:1190] 发布于 2007-10-11 21:42:00
可以重写form1的Disposed方法或者Closed事件,在事件中打开form2
8 楼
uatoily [专家分:40] 发布于 2007-10-25 10:19:00
忘记加进行了..现在修改好了
你要运用到线程..
因为Form2是在Form1里运行,当Form1关闭时Form2也跟着关闭
Thread T=new Thread({delegate(){Form2 frm=new Form2();frm.Show();this.Close();Application.Run(frm); })
T.Start();
9 楼
nieshoushuai [专家分:100] 发布于 2007-10-26 11:52:00
还是delphi简单啊,这么一个小问题,这么费劲。
10 楼
uatoily [专家分:40] 发布于 2007-10-27 22:10:00
还有一种方法...
有一个Form1主的就是Application.Run(new Form1())
Form2是加入的
难后在运行时this.Hide();//隐藏Form1
难后Form2 frm=new Form2();
frm.ShowDialog();
if(号码和密码都通过)
{
frm.close();
this.Show();
}
我来回复