点窗口右上角'X'按钮无法关闭窗口

大狗狗 2009-02-15 08:50:56
C# 2.0

程序中创建一对话框,设ShowInTaskBar为false; 先hide这个对话框,使用时show,不用时再hide.

响应退出菜单命令:
dialog.close();
dialog.dispose();
Application.Exit();
(没有前两句主窗口关不掉)

OK,程序退出。


由于用户可能会直接点主窗口上的X来闭掉程序,我在FormClosing事件处理函数中加上:
dialog.close();
dialog.dispose();
...
可这里主窗口就关不掉了!请问怎么回事呢?
...全文
1255 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
大狗狗 2009-02-16
  • 打赏
  • 举报
回复
找到原因了!

"当用户点击窗口右上角的X时,会先后引发FormClosing和FormClosed事件,在FormClosing事件中可将e.Cancel设为true来取消窗口的关闭,但是之后再用Form.Close方法关闭窗体时,FormClosing事件仍然会被捕获.按MSDN的说法,Application.Exit()方法可以不引发FormClosing和FormClosed事件.
在自己的一个NotifyIcon程序中,隐藏的窗体在使用Application.Exit()事件时,没有退出.原因为何呢?
调用Form.Dispose(),然后调用application.Exit(),程序顺利关闭,看来对于隐藏的窗体,需先释放资源,才可关闭程序."

参照这段文字,我在主窗口FormClosing事件处理函数中加上this.Dispose(); 问题就解决了。
yagebu1983 2009-02-15
  • 打赏
  • 举报
回复
楼主还没有理解Form执行的过程事件。。。
看看就知道了。。。
哈哈潜伏哥 2009-02-15
  • 打赏
  • 举报
回复
对话框分为模式对话框和非模式对话框。模式对话框处于程序窗口最上层的,如果该对话框没有释放,那程序的窗体就不能获得焦点或释放。如果是非模式对话框则不会有这个问题。

窗体用showdialog方法显示出来的,就叫模式对话框。直接用show方法显示出来的就是非模式的。


至于楼主窗口不能关闭的问题,我觉得是因为楼主没有设置父窗体的问题,在显示dialog的时候,应该将dialog的owner属性设置为主窗体,那么在主窗体退出的时候dialog也会随之退出。

如果不设置则会引起楼主出现的问题。
uncleson88 2009-02-15
  • 打赏
  • 举报
回复
你在MAIN()函数中设定的主窗体是哪个?不要设为dialog!!!
king19840811 2009-02-15
  • 打赏
  • 举报
回复
把你对话框相关的代码贴出来,那部分代码可能有问题

111,098

社区成员

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

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

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