回 帖 发 新 帖 刷新版面

主题:[讨论]C#关闭当前窗体打开另一窗体

有两个窗体form1,form2.我的意思是当关闭form1时,打开form2。我写的代码是:
this.hide();
form2 f2=new form2();
form2.show();
//
但是form1还驻留在内存中,我想有把form1完全释放掉,该怎么办呢?

回复列表 (共13个回复)

沙发

hide():只是隐藏窗体,并未释放相关资源。
close():关闭窗体并释放相关资源。

板凳

我的意思是把form1释放,然后打开form2

3 楼

this.hide();  //隐藏form1
form2 f2=new form2();
form2.show(); //显示form2
this.close(); //关掉form1
=================================================
现执行了
form1.close();
下面是不执行的
form2 f2=new form2();
form2.show(); //显示form2



4 楼


[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 楼

.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 楼

或者 可 以 试 试 form.showdiagio();
这 样 子 可 以 将 调 用 的 窗 口 hide(),
而 只 显 示 被 调 用 的 窗 口 ...

7 楼

可以重写form1的Disposed方法或者Closed事件,在事件中打开form2

8 楼

忘记加进行了..现在修改好了
你要运用到线程..
因为Form2是在Form1里运行,当Form1关闭时Form2也跟着关闭
Thread T=new Thread({delegate(){Form2 frm=new Form2();frm.Show();this.Close();Application.Run(frm); })
T.Start();

9 楼

还是delphi简单啊,这么一个小问题,这么费劲。

10 楼


还有一种方法...
有一个Form1主的就是Application.Run(new Form1())
Form2是加入的
难后在运行时this.Hide();//隐藏Form1
难后Form2 frm=new Form2();
frm.ShowDialog();
if(号码和密码都通过)
{
frm.close();
this.Show();
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册