winform中,窗口跳转后怎么关掉上一个窗口?

ajo413 2012-10-25 09:25:12
假如,我从窗口A跳到窗口B,那么就应该显示窗口B而关掉窗口A。
我看到有人教用隐藏的。我是这么写

在A中写:
B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();

这样写的话,窗口A是可以关掉。但是问题是,A窗口貌似只是隐藏的,所以当我关掉B窗口时,我在进程里还是看到这个程序在运行的。所以如果程序有很多窗口,这样隐藏的会不会造成资源占用过多呀?
所以想问,如何实现窗口跳转后关闭掉上一个窗口呀?
...全文
1011 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajo413 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();
Application.ExitThread();

Application.ExitThread();是退出当前线程。
首先默认情况下我们的程序是单线程的,
this.hide();后把当前窗体隐藏起来了,然后new_……
[/Quote]

长知识了,很好,多谢哈!!方法很好,最重要的是我理解了~~呵呵~
wuyq11 2012-10-25
  • 打赏
  • 举报
回复
代理,关闭事件
Hauk 2012-10-25
  • 打赏
  • 举报
回复
B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();
Application.ExitThread();

Application.ExitThread();是退出当前线程。
首先默认情况下我们的程序是单线程的,
this.hide();后把当前窗体隐藏起来了,然后new_form.showdialog();模态弹出新窗口。
这个时候线程不会继续执行(被阻塞了),
直到我们关闭了新弹出来的模态窗口后,程序才会继续执行Application.ExitThread();此时线程关闭,所有一切都关闭了,隐藏的窗口也关闭了。


我发在7楼的方法(2种都可以),
新开一个线程显示新窗口,当前线程立即退出,不会一直隐藏在后台占用资源。这种方式更加科学。


请问通过线程启动新窗口和直接启动,有什么不同吗?
一个藏在后台,一个立即关闭。
ajo413 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

还可以新开一个线程来启动新窗口。

Thread th = new Thread(fun => { Application.Run(new B()); });
th.Start();
this.Close();


Thread th = new Thread(fu……
[/Quote]

请问通过线程启动新窗口和直接启动,有什么不同吗?
ajo413 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

关闭子窗体后
form2.Closed += (ss,ee)=> { this.Close(); };
或Application.OpenForms集合找到要关闭的窗口,再Close:
foreach (var item in Application.OpenForms)
{
if (item is Form1) item.Close();
}
[/Quote]
不太明白呢T.T
(ss,ee)=> { this.Close(); };请问这个是啥意思呢?
还有,以上的是两种方法吗?
Hauk 2012-10-25
  • 打赏
  • 举报
回复
还可以新开一个线程来启动新窗口。

Thread th = new Thread(fun => { Application.Run(new B()); });
th.Start();
this.Close();


Thread th = new Thread(fun => { new Form3().ShowDialog(); });
th.Start();
this.Close();
littleUFO2012 2012-10-25
  • 打赏
  • 举报
回复
吼吼,五楼的办法比较简单。
wuyq11 2012-10-25
  • 打赏
  • 举报
回复
关闭子窗体后
form2.Closed += (ss,ee)=> { this.Close(); };
或Application.OpenForms集合找到要关闭的窗口,再Close:
foreach (var item in Application.OpenForms)
{
if (item is Form1) item.Close();
}
ajo413 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();
Application.ExitThread();
[/Quote]
请问,这句的具体意思是什么呢?还需要加什么参数吗
Application.ExitThread();
Hauk 2012-10-25
  • 打赏
  • 举报
回复
B new_form = new B();
new_form.owner = this;
this.hide();
new_form.showdialog();
Application.ExitThread();
ajo413 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

在A中监控B窗口,若B窗口关闭,则A退出。
[/Quote]

怎么监控哦?求代码~
littleUFO2012 2012-10-25
  • 打赏
  • 举报
回复
在A中监控B窗口,若B窗口关闭,则A退出。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧