【问题标题】:WinForms - Keep child form open in case user cancels closing parent formWinForms - 在用户取消关闭父表单的情况下保持子表单打开
【发布时间】:2016-04-25 17:34:58
【问题描述】:

背景:

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

问题:

目前P 正在处理ParentFormChildFormFormClosing 事件,如果确定允许用户关闭这些表单,则调用Form.CloseForm.Dispose

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

问题:

有没有办法判断是否正在调用 FormClosing 以响应父表单关闭?

有没有办法将“X”按钮视为普通按钮?

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

【问题讨论】:

  • 请澄清术语“子表单” - 例如MdiChild,拥有形式还是? e.CloseReason 在一种或另一种情况下显示什么?
  • @Ivan - 抱歉,我所说的“孩子”是指ChildForm.Owner == ParentForm。我不知道e.CloseReason;这给了我我需要的所有信息。当用户试图关闭 ChildForm 时,它的 CloseReason.UserClosing ,当用户试图退出程序时,它的 CloseReason.FormOwnerClosing。谢谢。
  • @Ivan - 作为答案发布,以便我接受。

标签: c# winforms


【解决方案1】:

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

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

查看CloseReason Enumeration 值,尤其是FormOwnerClosingMdiFormClosing

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多