如何禁用ALT + F4关闭的形式?

问题描述 投票:72回答:11

什么是在C#赢形式禁用ALT + F4的最佳方式,以防止用户关闭窗体?

我使用的是形式,一个弹出式对话框显示进度条,我不希望用户能够将其关闭。

c# .net winforms
11个回答
102
投票

这样做的工作:

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();

2
投票

订阅的FormClosing事件

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

只有在方法体中一行。


-3
投票

通过在窗体的构造函数使用下面的隐藏表单上的关闭按钮:

this.ControlBox = false;

57
投票

如果你看一下valueFormClosingEventArgs e.CloseReason,它会告诉你为什么形式正在被关闭。然后,您可以决定做什么,可能的值是:

成员名称 - 说明


无 - 关闭的原因是没有定义或无法确定。

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

MdiFormClosing - 此多文档界面的母体形式(MDI)形式正在缩小。

UserClosing - 用户通过点击关闭按钮的形式窗口上,选择从所述窗口的控制菜单关闭,或按下ALT + F4通过用户界面(UI)闭合形式,例如。

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

FormOwnerClosing - 所有者形式正在缩小。

ApplicationExitCall - Application类的Exit方法被调用。


25
投票

我相信这是做正确的方式:

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

  base.OnFormClosing(e);
}

16
投票

请注意,它被认为是不好的形式为应用程序完全防止自身关闭。您应该检查事件参数的Closing事件,以确定您的应用程序是如何和为什么要求关闭。如果是因为Windows关机,你不应该阻止发生的关闭。


13
投票

你可以处理FormClosing事件,并FormClosingEventArgs.Canceltrue


12
投票

我使用的是形式,一个弹出式对话框显示进度条,我不希望用户能够将其关闭。

如果用户被确定为关闭您的应用程序(和知识),足以按ALT + F4,他们将最有可能也是足够的知识来运行任务管理器,并杀死你的应用程序来代替。

至少在ALT + F4您的应用程序可以做一个正常关机,而不是仅仅让人们杀死它。从以往的经验,人们杀死你的应用意味着腐败的配置文件,破数据库,半完成的任务,你不能恢复,以及其他许多痛苦的事情。

至少促使他们以“你确定”,而不是全力以赴防止它。


5
投票

这是禁用ALT + F4黑客攻击。

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

3
投票

这样做的工作:

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;
  }


}

2
投票

将待的FormClosing甚至称,当你编程关闭窗口?如果是这样,你可能想添加一些代码,以允许封闭形式,当你用它(而不是总是取消操作)完成

© www.soinside.com 2019 - 2024. All rights reserved.