【问题标题】:How to restrict user from closing the Winform c#如何限制用户关闭 Winform c#
【发布时间】:2011-12-19 16:32:26
【问题描述】:

我知道这是一个非常简单的问题,但我正在寻找简洁明了的建议。我的应用程序是 MDI 应用程序。创建了一个在整个应用程序中使用的基本表单。我们不希望用户关闭一些表单,因此为了避免人为错误,我们计划不允许用户关闭这些表单。

我尝试在表单关闭事件中设置e.cancel = true,但它似乎不起作用,有人可以给我一些建议吗?

编辑:

Private void FrmTask_FormClosing(object sender, FormClosingEventArgs e)
        {         
                e.Cancel = true;
        }

问题是,当我使用此代码时,我的 MDI 应用程序中的任何窗体都没有关闭,即使是主 MDI 父窗体也是如此。

【问题讨论】:

  • 你的意思是阻止关闭窗口?甚至停止这个过程?
  • 代码示例会很有帮助。 e.取消=真;应该做的伎俩。
  • 请告诉我们您设置e.Cancel = true;的代码
  • 设置e.Cancel 应该可以工作。描述接下来会发生什么。
  • 我的票数不多了,但这是重复的:How can I prevent a user from closing my C# application?。正如其他人所提到的,e.Cancel 应该可以工作,但它不是一个特别强大的解决方案。

标签: c# .net winforms mdi formclosing


【解决方案1】:

你也不能显示关闭按钮:

http://blogs.msdn.com/b/atosah/archive/2007/05/18/disable-close-x-button-in-winforms-using-c.aspx

Cody Gray 在 cmets 中提供了一个更好的链接,该链接也不允许 Alt-F4 关闭:

https://stackoverflow.com/a/4655948/366904

【讨论】:

  • 但是用户可以使用 Alt+F4 关闭表单。
  • 是的,这是禁用关闭按钮的错误方式。正如 Fischermaen 所提到的,用户仍然可以使用键盘关闭窗口。相反,您应该将CS_NOCLOSE 样式添加到窗口类,如here 所述。
  • @CodyGray 不错的发现!我会更新答案以包含您的链接。如果您将其发布为答案,我会支持您希望给您接受的标题。
  • @ach:我已经把它作为另一个问题的答案发布了......大约一年前
【解决方案2】:

可能这里的问题是您希望窗口在应用存在时关闭,但如果用户尝试手动关闭它则不会。

为此,您必须手动覆盖,例如定义一个名为 allowShutdown 的变量,并拥有一个可以在 MdiParent 关闭时设置它的方法。

private void Form_Closing(object sender, EventArgs e)
{
  if( !allowShutdown) e.Cancel = true;
}

public void ForceShutdown()
{
  allowShutdown = true;
  Close();
}

然后在你的父表单中:

private void Form_Closing(object sender, EventArgs e)
{
  if( childForm != null ) childForm.ForceShutdown();
}

这假设您在创建父表单时维护对子表单的引用。将此与隐藏另一篇文章中提到的关闭按钮的功能相结合,您应该有一个可行的解决方案。

【讨论】:

  • 是的,这可能会起作用,但这是一个相当丑陋的解决方案。您正在阻止用户在没有告诉他们不允许关闭表单的情况下关闭表单。他们会坐在那里徒劳地点击“X”按钮,什么都不会发生。绝对没有任何线索表明他们不允许关闭窗户。我在上面链接的solution 是一个更好的选择。它最大限度地减少了您必须在每个表单中编写的代码量,并且还让用户清楚地知道他们不允许关闭窗口。
  • 哈哈哈,不会有消息显示不要关闭仪表板,因为这是获取实时数据,但为了避免人为错误,我们正在实施此解决方案。
  • 我说过要实现这个以及其他帖子中的视觉变化。
【解决方案3】:

我怀疑FormClosingEventArgs.CloseReason 会给你足够的信息来确定是否有条件地取消关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    相关资源
    最近更新 更多