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

小仙女&& 2019-05-13 03:25:39
直接关闭父窗体时,会跳到关闭子窗体的事件中,提示是否关闭子窗体,点击是,子窗体还是会存在,这个怎么解决啊
...全文
3143 35 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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);
加载更多回复(15)

111,097

社区成员

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

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

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