C#/Winform,为什么子窗口自动定时关闭后,主窗口弹出的MessageBox也自动关了?

看图:启动调试,点击按钮,会同时弹出form2和messagebox,但按照一般的理解messagebox只有用户点击才会关闭,现实情况是关了。请解释其原因,不是要解决方... 看图:

启动调试,点击按钮,会同时弹出form2和messagebox,但按照一般的理解messagebox只有用户点击才会关闭,现实情况是关了。
请解释其原因,不是要解决方法,是合理原因。
展开
 我来答
FantasyChump
推荐于2016-11-05 · TA获得超过3288个赞
知道大有可为答主
回答量:2127
采纳率:0%
帮助的人:2246万
展开全部
当你打开messagebox的时候没有指定其owner,那么当前的活动窗口会被自动设置为其owner。在你的代码中,打开的信息框的owner即是form2.因此,当你的form2关闭时,所属的messagebox作为一个子窗口也将会被自动关闭。
而form则不会有此影响,因为form都是顶级窗口,它没有owner,所以不会互相影响。
要避免此问题,可以在Show消息框的时候指定一个owner,比如 MessageBox.Show(this ,"test message"),你就会看到这个消息框不会随着Form2的关闭而关闭了。
44281071
2014-11-29 · TA获得超过340个赞
知道答主
回答量:66
采纳率:0%
帮助的人:79.8万
展开全部
这种类型的项目,都会分“前台线程”和“后台线程”的,意思就是,你的主窗体占用着主线程,主窗体关闭,所有属于它的子级全都会被关闭。打个比方说,你这个软件开启了,显示出界面了,然后有个播放歌曲的任务被你执行,然后你把主窗体关闭,理应的结果是歌曲也会被停止,不然就乱套了。
更多追问追答
追问
你没看清楚代码吧,自动关闭的是子窗口。而你回答的是“主窗体关闭,所有属于它的子级全都会被关闭”。主窗口直到最后都一直开着,何来主窗体关闭一说?
追答
因为“模态框”这个东西,有一个Owner这个概念,你先启动的是win2,再启动的是提示框,而提示框就是模态框的一种,他会寄宿在当前active(活动的)的窗体上,也就是刚因Show()方法而被激活的win2,于是宿主就是win2……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式