如何禁用Alt + F4closures窗体?

在ac#win表格中禁用Alt + F4以防止用户closures表单的最佳方法是什么?

我正在使用窗体作为popup对话框来显示进度栏,我不希望用户能够closures它。

这样做的工作:

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

编辑:为了响应pix0rs的关注 – 是的,你是正确的,你将无法编程closures应用程序。 但是,您可以在closures表单之前简单地移除form_closing事件的事件处理程序:

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

@TK

如果您查看FormClosingEventArgs e.CloseReason的值,它会告诉您为什么表单正在closures。 然后您可以决定要做什么,可能的值是:

成员名称 – 说明


– closures的原因没有定义或无法确定。

WindowsShutDown – 操作系统在closures之前closures所有应用程序。

MdiFormClosing – 此多个文档界面(MDI)窗体的父窗体正在closures。

用户closures – 用户通过用户界面(UI)closures表单,例如通过单击表单窗口上的closuresbutton,从窗口的控制菜单中selectclosures,或者按下ALT + F4键。

TaskManagerClosing – Microsoft Windows任务pipe理器正在closures应用程序。

FormOwnerClosing – 所有者窗体正在closures。

ApplicationExitCall – 调用Application类的Exit方法。

我相信这是正确的做法:

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

请注意,对于应用程序来说,完全阻止其自动closures被认为是不正确的forms。 您应该检查closures事件的事件参数,以确定如何以及为什么您的应用程序被要求closures。 如果是因为Windows关机,则不应阻止closures发生。

您可以处理FormClosing事件并将FormClosingEventArgs.Cancel设置为true

我正在使用窗体作为popup对话框来显示进度栏,我不希望用户能够closures它。

如果用户决定closures你的应用程序(和知识)足以按alt + f4,他们很可能也是足够的知识运行任务pipe理器,并杀死你的应用程序。

至less在alt + f4中,你的应用程序可以做一个优雅的关机,而不是让人们杀死它。 根据经验,人们杀死你的应用程序意味着损坏的configuration文件,破损的数据库,你不能恢复的一半完成的任务,以及许多其他痛苦的事情。

至less用“你确定”来提示他们,而不是把他们阻止。

即使在编程closures窗口时,FormClosing会被调用吗? 如果是这样的话,你可能想要添加一些代码来让表单在你完成时closures(而不是总是取消操作)

订阅FormClosing事件

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

方法体中只有一行。

在FormClosing事件处理程序中,如果按下了[Alt] + [F4]键,您是否可以不询问键盘缓冲区(您是否可以访问此键)?如果为true,则继续;否则继续?

这对我来说是100%,这是为了禁用ALT + F4

  private void test_FormClosing(object sender, FormClosingEventArgs e) { if (test.ModifierKeys == Keys.Alt || test.ModifierKeys == Keys.F4) { e.Cancel = true; } } 

通过在窗体的构造函数中使用以下隐藏窗体上的closuresbutton:

 this.ControlBox = false;