WinForms - 保持子表单打开,以防用户取消关闭父表单

时间:2016-04-25 17:34:59

标签: c# winforms

背景

我正在使用C#4.0和VS2013创建一个WinForms应用程序。我的应用有一个名为ParentForm的主表单和一个名为ChildForm的辅助表单。该应用程序遵循Model-View-Presenter设计,因此我希望我的演示者类P能够控制所有表单的打开,关闭,按钮点击以及用户请求的任何内容。 (两种形式实际上都是在“视图”接口后面抽象的,但问题是WinForms实现,所以让我们忽略接口。)

问题:

目前P正在处理FormClosingParentForm的{​​{1}}个事件,并在确定用户时调用ChildFormForm.Close允许关闭这些表格。

我遇到的问题是Form.Dispose是否已打开且用户点击了ChildForm上的“X”按钮。在这种情况下,ParentForm首先调用FormClosing,然后调用ChildFormParentForm无法知道用户是否点击了P上的“X”(ChildForm应该通过关闭P做出反应,或者用户点击了' ChildForm上的X'(ParentForm应该通过在关闭任何表单之前确认用户是否真的要退出来做出反应。)

问题:

有没有办法判断是否正在调用P以响应父表单的结束?

有没有办法像普通按钮一样对待'X'按钮?

有没有办法阻止子表单关闭,直到父表单的FormClosing事件(以及可能的用户取消)之后?

1 个答案:

答案 0 :(得分:1)

您可以使用FormClosingEventArgs.CloseReason属性,根据MSDN

  

获取一个值,该值指示表单被关闭的原因。

请参阅CloseReason Enumeration值,尤其是FormOwnerClosingMdiFormClosing