如何限制用户关闭Winform c#

时间:2011-12-19 16:32:27

标签: c# .net winforms mdi formclosing

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

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

编辑:

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

问题在于,当我使用此代码时,我的MDI应用程序中的表单都没有关闭,甚至是主MDI父表单。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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();
}

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

答案 2 :(得分:0)

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