什么是在C#赢形式禁用ALT + F4的最佳方式,以防止用户关闭窗体?
我使用的是形式,一个弹出式对话框显示进度条,我不希望用户能够将其关闭。
这样做的工作:
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事件
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = e.CloseReason == CloseReason.UserClosing;
}
只有在方法体中一行。
通过在窗体的构造函数使用下面的隐藏表单上的关闭按钮:
this.ControlBox = false;
如果你看一下value的FormClosingEventArgs e.CloseReason
,它会告诉你为什么形式正在被关闭。然后,您可以决定做什么,可能的值是:
成员名称 - 说明
无 - 关闭的原因是没有定义或无法确定。
WindowsShutDown - 操作系统正在关闭之前关闭所有应用程序。
MdiFormClosing - 此多文档界面的母体形式(MDI)形式正在缩小。
UserClosing - 用户通过点击关闭按钮的形式窗口上,选择从所述窗口的控制菜单关闭,或按下ALT + F4通过用户界面(UI)闭合形式,例如。
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);
}
请注意,它被认为是不好的形式为应用程序完全防止自身关闭。您应该检查事件参数的Closing事件,以确定您的应用程序是如何和为什么要求关闭。如果是因为Windows关机,你不应该阻止发生的关闭。
你可以处理FormClosing
事件,并FormClosingEventArgs.Cancel
到true
。
我使用的是形式,一个弹出式对话框显示进度条,我不希望用户能够将其关闭。
如果用户被确定为关闭您的应用程序(和知识),足以按ALT + F4,他们将最有可能也是足够的知识来运行任务管理器,并杀死你的应用程序来代替。
至少在ALT + F4您的应用程序可以做一个正常关机,而不是仅仅让人们杀死它。从以往的经验,人们杀死你的应用意味着腐败的配置文件,破数据库,半完成的任务,你不能恢复,以及其他许多痛苦的事情。
至少促使他们以“你确定”,而不是全力以赴防止它。
这是禁用ALT + F4黑客攻击。
private void test_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4)
{
e.Cancel = true;
}
}
这样做的工作:
bool myButtonWasClicked = false;
private void Exit_Click(object sender, EventArgs e)
{
myButtonWasClicked = true;
Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (myButtonWasClicked)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
将待的FormClosing甚至称,当你编程关闭窗口?如果是这样,你可能想添加一些代码,以允许封闭形式,当你用它(而不是总是取消操作)完成