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