禁用 Alt+F4 但允许通过代码关闭表单,CloseReason.UserClosing 没有帮助

发布于 2024-08-28 19:00:27 字数 202 浏览 6 评论 0原文

我希望表单不会通过 Alt + F4 关闭,但如果 Application.Exit()this.Close 是从同一个表单调用的,应该将其关闭。

我尝试了 CloseReason.UserClosing 但仍然没有帮助。

I want that the form will not close by doing Alt + F4 but if Application.Exit() or this.Close is called from the same Form, it should be closed.

I tried CloseReason.UserClosing but still no help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

瑕疵 2024-09-04 19:00:27

如果您需要仅过滤 Alt + F4 事件(留下关闭框的单击、this.Close()Application. Exit() 表现如常),那么我可以建议以下操作:

  1. 设置表单的 KeyPreview
    属性为true
  2. 连接表单的FormClosing< /code>KeyDown 事件:

    private void Form1_FormClosing(对象发送者,FormClosingEventArgs e)
    {
        如果 (_altF4Pressed)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                e.取消=真;
            _altF4Pressed = 假;
        }
    }
    
    私人布尔_altF4Pressed;
    私有无效Form1_KeyDown(对象发送者,KeyEventArgs e)
    {
        if (e.Alt && e.KeyCode == Keys.F4)
            _altF4Pressed = true;
    }
    

If you need to filter out Alt + F4 event only (leaving clicking of close box, this.Close() and Application.Exit() to behave as usual) then I can suggest the following:

  1. Set form's KeyPreview
    property to true;
  2. Wire up form's FormClosing and KeyDown events:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_altF4Pressed)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                e.Cancel = true;
            _altF4Pressed = false;
        }
    }
    
    private bool _altF4Pressed;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Alt && e.KeyCode == Keys.F4)
            _altF4Pressed = true;
    }
    
黑寡妇 2024-09-04 19:00:27

您可以通过在 Form_Keydown EventHandler 上将 SuppressKeyPress 属性设置为 true 来实现这一点,如下所示。

        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

这样,您还可以通过在同一 eventHandler 上将 SuppressKeyPress 属性设置为 false 或任何其他方式来关闭活动表单。

It's very easy you can do it by set SuppressKeyPress property to true on Form_Keydown EventHandler as below.

        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

With this you can also close your active form by set SuppressKeyPress Property to false on same eventHandller or any other way.

蓝眸 2024-09-04 19:00:27

通过将 Form 的 KeyPreview 属性设置为 true 并重写 OnProcessCmdKey 方法来捕获 Alt+F4 热键。

Capture Alt+F4 hotkey by setting Form's KeyPreview property to true and overriding OnProcessCmdKey method.

梦醒时光 2024-09-04 19:00:27

您是如何使用 CloseReason 的?

请参阅此处的示例代码:
http://msdn.microsoft.com/ en-us/library/system.windows.forms.form.formleading.aspx

您需要设置传递的 FormClosingEventArgs 对象的 Cancel 属性以停止表单关闭。

How did you use CloseReason?

See the sample code here:
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

You need to set the Cancel property of the passed FormClosingEventArgs object to stop the form closing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文