如何禁用Alt + F4关闭表格?
在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); }