背景
我正在使用C#4.0和VS2013创建一个WinForms应用程序。我的应用有一个名为ParentForm
的主表单和一个名为ChildForm
的辅助表单。该应用程序遵循Model-View-Presenter设计,因此我希望我的演示者类P
能够控制所有表单的打开,关闭,按钮点击以及用户请求的任何内容。 (两种形式实际上都是在“视图”接口后面抽象的,但问题是WinForms实现,所以让我们忽略接口。)
问题:
目前P
正在处理FormClosing
和ParentForm
的{{1}}个事件,并在确定用户时调用ChildForm
或Form.Close
允许关闭这些表格。
我遇到的问题是Form.Dispose
是否已打开且用户点击了ChildForm
上的“X”按钮。在这种情况下,ParentForm
首先调用FormClosing
,然后调用ChildForm
。 ParentForm
无法知道用户是否点击了P
上的“X”(ChildForm
应该通过关闭P
做出反应,或者用户点击了' ChildForm
上的X'(ParentForm
应该通过在关闭任何表单之前确认用户是否真的要退出来做出反应。)
问题:
有没有办法判断是否正在调用P
以响应父表单的结束?
有没有办法像普通按钮一样对待'X'按钮?
有没有办法阻止子表单关闭,直到父表单的FormClosing
事件(以及可能的用户取消)之后?
答案 0 :(得分:1)
您可以使用FormClosingEventArgs.CloseReason属性,根据MSDN
获取一个值,该值指示表单被关闭的原因。
请参阅CloseReason Enumeration值,尤其是FormOwnerClosing
和MdiFormClosing
。