如何禁用Alt + F4关闭表格?

时间:2020-03-05 18:40:27  来源:igfitidea点击:

在cwin表单中禁用" Alt"和" F4"以防止用户关闭表单的最佳方法是什么?

我使用窗体作为弹出对话框来显示进度条,但我不希望用户能够将其关闭。

解决方案

回答

我们可以处理FormClosing事件,并将FormClosingEventArgs.Cancel设置为true。

回答

这可以完成工作:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}

编辑:对于pix0rs的关注,是的,我们是正确的,我们将无法以编程方式关闭该应用程序。但是,我们可以在关闭表单之前简单地删除form_closing事件的事件处理程序:

this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();

回答

在FormClosing事件处理程序中,我们是否可以询问键盘缓冲区(我们是否可以访问此缓冲区?)以检查是否按下了[Alt] + [F4],如果是,则取消,否则,是否继续?

回答

即使我们以编程方式关闭窗口,也会调用FormClosing吗?如果是这样,我们可能希望添加一些代码以允许在完成表单后关闭该表单(而不是总是取消该操作)

回答

请注意,对于应用程序来说,完全阻止其自身关闭是一种不好的形式。我们应该检查Closing事件的事件参数,以确定关闭应用程序的方式和原因。如果是由于Windows关闭导致的,则不应阻止关闭的发生。

回答

I am using a form as a popup dialog to display a progress bar and I do not want the user to be able to close it.

如果确定用户关闭了应用程序(并且知识渊博)足以按alt + f4,则他们很可能也足够知识渊博,可以运行任务管理器并杀死应用程序。

至少使用alt + f4,应用程序可以正常关闭,而不仅仅是让人们杀死它。从经验来看,人们杀死应用程序意味着损坏的配置文件,损坏的数据库,无法恢复的未完成任务以及许多其他痛苦的事情。

至少用"我们确定"来提示他们,而不是全力以赴阻止它。

回答

@TK

如果我们查看FormClosingEventArgs e.CloseReason的值,它将告诉我们为什么关闭表单。然后,我们可以决定要做什么,可能的值是:

会员名称说明

无未确定或者无法确定关闭原因。

WindowsShutDown操作系统在关闭之前将关闭所有应用程序。

MdiFormClosing此多文档接口(MDI)表单的父表单正在关闭。

用户关闭用户正在通过用户界面(UI)关闭表单,例如通过单击表单窗口上的"关闭"按钮,从窗口的控制菜单中选择"关闭",或者按" ALT" +" F4"。

TaskManagerClosing Microsoft Windows任务管理器正在关闭应用程序。

FormOwnerClosing所有者表单正在关闭。

ApplicationExitCall调用了Application类的Exit方法。

回答

我相信这是正确的方法:

protected override void OnFormClosing(FormClosingEventArgs e)
{
  switch (e.CloseReason)
  {
    case CloseReason.UserClosing:
      e.Cancel = true;
      break;
  }

  base.OnFormClosing(e);
}