1

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

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

编辑:

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

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

4

3 回答 3

2

您也不能显示关闭按钮:

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

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

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

于 2011-12-19T16:34:46.343 回答
2

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

要做到这一点,您必须手动覆盖,比如一个名为allowShutdowndefined 的变量,并有一个可以在 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();
}

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

于 2011-12-19T16:47:11.750 回答
0

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

于 2011-12-19T17:56:48.300 回答