C# WinForm 怎么在关闭父窗体的时候直接关闭子窗体

小仙女&& 2019-05-13 03:25:39
直接关闭父窗体时,会跳到关闭子窗体的事件中,提示是否关闭子窗体,点击是,子窗体还是会存在,这个怎么解决啊
...全文
2590 点赞 收藏 35
写回复
35 条回复
xjd27 2019年05月15日
直接写在父窗体中吗啊啊啊
回复 点赞
小仙女&& 2019年05月15日
引用 34 楼 wilson1966 的回复:
楼上搞错了,应改写如下 也许可加一个全局变量来判断 例如:class.gBool.bIsParentFormClosed 父窗体中 DialogResult result = MessageBox.Show("确定退出软件吗", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { class.gBool.bIsParentFormClosed = true; e.Cancel = false; } else { e.Cancel = true; } 子窗体 If (class.gBool.bIsParentFormClosed) { } Else //当class.gBool.bIsParentFormClosed 为 false 才跑此段 { DialogResult result = MessageBox.Show("确定退出**吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { try { e.Cancel = false; //******* } catch(Exception ex) { MessageBox.Show(ex.Message, "提示"); } } else { e.Cancel = true; } }
子窗体存在的情况下,关闭父窗体的话class.gBool.bIsParentFormClosed为false,子窗体的弹出框还是会弹出
回复 点赞
小仙女&& 2019年05月15日
引用 34 楼 wilson1966 的回复:
楼上搞错了,应改写如下 也许可加一个全局变量来判断 例如:class.gBool.bIsParentFormClosed 父窗体中 DialogResult result = MessageBox.Show("确定退出软件吗", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { class.gBool.bIsParentFormClosed = true; e.Cancel = false; } else { e.Cancel = true; } 子窗体 If (class.gBool.bIsParentFormClosed) { } Else //当class.gBool.bIsParentFormClosed 为 false 才跑此段 { DialogResult result = MessageBox.Show("确定退出**吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { try { e.Cancel = false; //******* } catch(Exception ex) { MessageBox.Show(ex.Message, "提示"); } } else { e.Cancel = true; } }
感谢回答,我这个有很多子窗体,加标志位的话加太多了。
回复 点赞
wilson1966 2019年05月15日
楼上搞错了,应改写如下 也许可加一个全局变量来判断 例如:class.gBool.bIsParentFormClosed 父窗体中 DialogResult result = MessageBox.Show("确定退出软件吗", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { class.gBool.bIsParentFormClosed = true; e.Cancel = false; } else { e.Cancel = true; } 子窗体 If (class.gBool.bIsParentFormClosed) { } Else //当class.gBool.bIsParentFormClosed 为 false 才跑此段 { DialogResult result = MessageBox.Show("确定退出**吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { try { e.Cancel = false; //******* } catch(Exception ex) { MessageBox.Show(ex.Message, "提示"); } } else { e.Cancel = true; } }
回复 点赞
wilson1966 2019年05月15日
楼上搞错了,应改写如下 也许可加一个全局变量来判断 例如:class.gBool.bIsParentFormClosed 父窗体中 DialogResult result = MessageBox.Show("确定退出软件吗", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { class.gBool.bIsParentFormClosed = true; e.Cancel = false; } else { e.Cancel = true; } If (class.gBool.bIsParentFormClosed) { } Else //当class.gBool.bIsParentFormClosed 为 false 才跑此段 { DialogResult result = MessageBox.Show("确定退出**吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { try { e.Cancel = false; //******* } catch(Exception ex) { MessageBox.Show(ex.Message, "提示"); } } else { e.Cancel = true; } }
回复 点赞
wilson1966 2019年05月15日
也许可加一个全局变量来判断 例如:class.gBool.bIsParentFormClosed 父窗体中 DialogResult result = MessageBox.Show("确定退出软件吗", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { class.gString.sParentFormClosed = true; e.Cancel = false; } else { e.Cancel = true; } 子窗体中 If (class.gString.sParentFormClosed) { DialogResult result = MessageBox.Show("确定退出**吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { try { e.Cancel = false; //******* } catch(Exception ex) { MessageBox.Show(ex.Message, "提示"); } } else { e.Cancel = true; } }
回复 点赞
小仙女&& 2019年05月15日
引用 30 楼 xjd27 的回复:
直接写在父窗体中吗啊啊啊
在子窗体中写
回复 点赞
maz_alen 2019年05月15日
写在父窗体的FormClosing事件
回复 点赞
小仙女&& 2019年05月14日
感谢各位大佬的回答,目前已经找到了一个方法如下: 在子窗体关闭事件里面判断点击的是父窗体还是子窗体,然后进行相关的处理就可以了。 非常感谢大家
回复 点赞
小仙女&& 2019年05月14日
引用 20 楼 左耳边的期盼 的回复:
Environment.Exit(0);
这个方法试过了不行
回复 点赞
小仙女&& 2019年05月14日
引用 19 楼 平底锅锅锅 的回复:
可以设置一个标志位,进入关闭主窗体时,取消子窗体的弹窗提示。
如果设置标志的话,我有很多子窗体,是不是每个都要设置一下
回复 点赞
fangpengyu 2019年05月14日
路过,学习下
回复 点赞
左耳边的期盼 2019年05月14日
Environment.Exit(0);
回复 点赞
平底锅锅锅 2019年05月14日
可以设置一个标志位,进入关闭主窗体时,取消子窗体的弹窗提示。
回复 点赞
assky124 2019年05月14日
自己画个流程图看看,具体的流程改怎么操作

class BaseChild:Form{
   bool NeedAskQuit{get;set;}  = true
   OnClosing(s,e){
        if(!NeedAskQuit) return;
        AskForQuit()
   }
}

class ParentForm{
   List<BaseChild> Children;//所有子窗体集合,创建应加入,销毁移除
   OnClosing(s,e){
     if(AskForQuit()){
          //TODO 循环 将子窗体的NeedAskQuit设置为False,并关闭子窗体
      }
   }

}
回复 点赞
zxy2847225301 2019年05月14日
引用 16 楼 疯狂大菠萝 的回复:
[quote=引用 15 楼 zxy2847225301 的回复:]
父窗体关闭前把子窗体的FormClosing事件通过委托把它取消注册

能否具体说一下,不是很懂。谢谢
[/quote]


使得父窗体持有子窗体的静态引用,然后父窗体通过这个引用取消注册FormClosing事件(设子窗体的静态引用为 childForm,子窗体的注册的FormClosing方法名为childForm_FormClosing,则所需操作为 childForm.FormClosing-=childForm_FormClosing)


还有一种粗暴的方面,如果你的父窗体关闭了,整个程序都退出的话,可以在关闭父窗体时,把整个进程都杀掉
回复 点赞
小仙女&& 2019年05月14日
引用 15 楼 zxy2847225301 的回复:
父窗体关闭前把子窗体的FormClosing事件通过委托把它取消注册
能否具体说一下,不是很懂。谢谢
回复 点赞
许我蔚蓝 2019年05月14日
我围观下,看看大神们如何操作的。
回复 点赞
stareeww 2019年05月14日
DialogResult result = MessageBox.Show("确定退出**吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
if (result == DialogResult.OK)
{
try
{
//e.Cancel = false; //*******
Environment.Exit(0);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "提示");
}
回复 点赞
sunwanli11 2019年05月14日
Environment.Exit(0);
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告