如何实现父窗体关闭的时候判断子窗体是否关闭

喝水不喝茶 2016-09-26 10:26:23
请教下各位,在子窗体没有关闭的情况下,直接关闭父窗体,不能结束子窗体创建的线程,所以我想着是在关闭父窗体前先判断子窗体是否已经关闭。
子窗体的打开方式不能为ShowDialog,因为可能要操控多个子窗体。
...全文
541 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qbilbo 2016-09-26
  • 打赏
  • 举报
回复
引用 6 楼 niwota568 的回复:
[quote=引用 5 楼 qbilbo 的回复:] [quote=引用 4 楼 niwota568 的回复:] [quote=引用 2 楼 qbilbo 的回复:] 将子窗体的Owner设为主窗体,这样主窗体关闭时会自动关闭与之关联子窗体,不用自己判断。 至于关闭子窗体创建的线程,放在子窗体的FormClosing事件里就好。
我现在的窗体有三级,A窗体打开B窗体,B窗体再打开C窗体,线程是C窗体创建的,请问这种情况如何操作啊? B是在A的窗口中的创建的[/quote] C的实例的Owner设置为B的实例。[/quote] 这样的话直接关闭A并不能触发C的FormClosing事件[/quote] 那再把B的实例的Owner设置为A的实例呗。
喝水不喝茶 2016-09-26
  • 打赏
  • 举报
回复
引用 5 楼 qbilbo 的回复:
[quote=引用 4 楼 niwota568 的回复:] [quote=引用 2 楼 qbilbo 的回复:] 将子窗体的Owner设为主窗体,这样主窗体关闭时会自动关闭与之关联子窗体,不用自己判断。 至于关闭子窗体创建的线程,放在子窗体的FormClosing事件里就好。
我现在的窗体有三级,A窗体打开B窗体,B窗体再打开C窗体,线程是C窗体创建的,请问这种情况如何操作啊? B是在A的窗口中的创建的[/quote] C的实例的Owner设置为B的实例。[/quote] 这样的话直接关闭A并不能触发C的FormClosing事件
qbilbo 2016-09-26
  • 打赏
  • 举报
回复
引用 4 楼 niwota568 的回复:
[quote=引用 2 楼 qbilbo 的回复:] 将子窗体的Owner设为主窗体,这样主窗体关闭时会自动关闭与之关联子窗体,不用自己判断。 至于关闭子窗体创建的线程,放在子窗体的FormClosing事件里就好。
我现在的窗体有三级,A窗体打开B窗体,B窗体再打开C窗体,线程是C窗体创建的,请问这种情况如何操作啊? B是在A的窗口中的创建的[/quote] C的实例的Owner设置为B的实例。
喝水不喝茶 2016-09-26
  • 打赏
  • 举报
回复
引用 2 楼 qbilbo 的回复:
将子窗体的Owner设为主窗体,这样主窗体关闭时会自动关闭与之关联子窗体,不用自己判断。 至于关闭子窗体创建的线程,放在子窗体的FormClosing事件里就好。
我现在的窗体有三级,A窗体打开B窗体,B窗体再打开C窗体,线程是C窗体创建的,请问这种情况如何操作啊? B是在A的窗口中的创建的
  • 打赏
  • 举报
回复
引用 2 楼 qbilbo 的回复:
将子窗体的Owner设为主窗体,这样主窗体关闭时会自动关闭与之关联子窗体,不用自己判断。 至于关闭子窗体创建的线程,放在子窗体的FormClosing事件里就好。
正解
qbilbo 2016-09-26
  • 打赏
  • 举报
回复
将子窗体的Owner设为主窗体,这样主窗体关闭时会自动关闭与之关联子窗体,不用自己判断。 至于关闭子窗体创建的线程,放在子窗体的FormClosing事件里就好。
正怒月神 2016-09-26
  • 打赏
  • 举报
回复
在父窗体创建一个 子窗体对象,判断他是不是Null, 在子窗体的closeing事件中,把父窗体中的这个子窗体设置为Null
喝水不喝茶 2016-09-26
  • 打赏
  • 举报
回复
谢谢各位的回复,最后改用一个全局变量来判断是否有窗体打开
  • 打赏
  • 举报
回复
你看一下这个吧,还是好好的学习下窗体之间个关系 http://blog.csdn.net/libby1984/article/details/52169506
crystal_lz 2016-09-26
  • 打赏
  • 举报
回复
引用 9 楼 crystal_lz 的回复:
父窗体中 List<Form> lst = new List<Form>(); Form子窗体 frm = new Form子窗体(); frm.Show(); lst.Add(frm); 父窗体_Closing(...){ foreach(var v in lst){ if (!v.IsDisposed)...} }
额 不用lst的 刚才发现 有个东西new Form().AddOwnedForm() 和(Form[])OwnedForms属性
crystal_lz 2016-09-26
  • 打赏
  • 举报
回复
父窗体中 List<Form> lst = new List<Form>(); Form子窗体 frm = new Form子窗体(); frm.Show(); lst.Add(frm); 父窗体_Closing(...){ foreach(var v in lst){ if (!v.IsDisposed)...} }
xuzuning 2016-09-26
  • 打赏
  • 举报
回复
若 A 打开了 B,B 打开了 C 要在 A 关闭时,让 C 响应 FormClosed 和 FormClosing 事件 需要: 在 A.FormClosed 事件中 B的实例.Close() 在 B.FormClosed 事件中 C的实例.Close() 因为 FormClosed 和 FormClosing 事件 只在点击窗体的关闭按钮 或 用代码执行 Close() 方法时发生

110,539

社区成员

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

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

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