单击红色关闭 (x) 按钮和调用 .Close() 有啥区别?
Posted
技术标签:
【中文标题】单击红色关闭 (x) 按钮和调用 .Close() 有啥区别?【英文标题】:What's the difference between clicking the red close (x) button, and calling .Close()?单击红色关闭 (x) 按钮和调用 .Close() 有什么区别? 【发布时间】:2015-11-10 11:26:47 【问题描述】:我有一个 winforms 应用程序,在我的应用程序中,我创建了一个自定义表单。此自定义 from 在右上角具有默认的关闭、最小化和最大化按钮。如果我使用默认的红色 x 按钮关闭表单,它会正常关闭,没有问题。但是,如果我尝试通过在表单上调用 .Close() 来关闭表单,则会引发未处理的 InvalidOperationException 异常。
调用 .Close() 和单击该按钮有什么区别?为什么点击按钮可以正常工作,但调用 .Close() 会抛出异常?
【问题讨论】:
当您收到异常时,您可以轻松查看堆栈跟踪。此信息对于了解导致异常的原因至关重要。您可以在此处添加该信息 @Steve 没有堆栈跟踪。应用程序不会崩溃或抛出异常。我知道它正在发生的唯一方法是因为输出显示以下行:“System.Windows.Forms.dll 中发生了‘System.InvalidOperationException’类型的第一次机会异常” @Steve,我知道这是因为表单没有关闭。 @TylerJones 那时您可能正在抑制异常。有没有可以在测试期间注释掉的 try/catch 子句?可能需要显示您的一些代码... @NathanA 不,任何有问题的代码周围都没有尝试/捕获。 【参考方案1】:您可以使用TOOLS->Spy++
记录窗口消息。
来自: http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/Form.cs,b6605a5b113b45f7
Form.Close()
方法调用:
closeReason = CloseReason.UserClosing;
SendMessage(NativeMethods.WM_CLOSE, 0, 0);
另外,尝试搜索异常消息: https://www.google.com/search?q=Form+C%23+A+first+chance+exception+of+type++webbrowser&ie=utf-8&oe=utf-8
想出了这个链接:
C# : "A first chance exception of type 'System.InvalidOperationException'"
【讨论】:
以上是关于单击红色关闭 (x) 按钮和调用 .Close() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python Turtle 图形中检测 X(关闭)按钮?
获取非客户端“关闭”按钮的 hWnd [x] (win32)