【发布时间】:2013-05-03 22:24:13
【问题描述】:
我已经阅读了几篇关于禁用 Alt+F4 的文章,到目前为止,它已经部分正常工作了。
目前,我的主表单上有这个,它做得很好,只允许在我需要时关闭表单..
private void Alerter_FormClosing(object sender, FormClosingEventArgs e)
{
if (_altF4Pressed)
{
if (e.CloseReason == CloseReason.UserClosing)
e.Cancel = true;
_altF4Pressed = false;
}
}
private void Alerter_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.F4)
_altF4Pressed = true;
}
然而,问题是当我显示一个对话框时这不起作用。 表单仍然在 Alt+F4 上关闭,并且必须避免这种情况发生,因为它为用户提供了一种规避流程和过程的方法。
目前,我的警报表单是使用;
public static DialogResult show(string param)
{
thisParam = param;
using (Alerter alert = new Alerter())
{
if (alert.ShowDialog() == DialogResult.OK) { return DialogResult.OK; }
else { return DialogResult.Cancel; }
}
}
我的主表单使用它来调用它;
Alerter.show(rxLine);
除非我明确告诉它,否则我怎样才能防止新表单被关闭?
【问题讨论】:
-
为什么你会永远想要这个? ALT+F4 用作最后的手段。你在写什么,病毒?
-
必须同意@ofstream:几乎没有任何情况适合对您的用户执行此操作。如果他们希望您的对话不碍事,他们会以某种方式将其排除在外。如果您为他们提供关闭的功能(以及“您确定吗?”对话框),那么他们将使用它。如果你不,那么他们会生你的气,然后无论如何都要使用任务管理器杀死进程。
-
虽然我能理解这种谨慎......不,我不是在写病毒......实际上远非如此。我正在编写对现有定制应用程序的升级,其目的是通知最终用户产品召回并强制确认通知。然后,签字人负责采取行动召回。我们还构建用户使用的机器。并锁定不需要的访问,以防止数据库等关键进程被篡改。