这不是 How to Disable Alt + F4 closing form? 的副本。请阅读为什么。

我在我的主表单下制作了一个自定义的 MessageBox。

c# - 如何使用 alt + F4 防止任何表单关闭-LMLPHP

并将“Aight”按钮单击监听器设置为:

private void Aight_buton_Click(object sender, EventArgs e)
{
    dr = DialogResult.OK;
    Close();
}

“X”按钮的情况也是如此。按照上述问题的答案,我可以这样做:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = e.CloseReason == CloseReason.UserClosing;
}

但由于我在 Close() 下使用 Aight_buton_Click 它仍然注册为 e.CloseReason == CloseReason.UserClosing; 。因此,按该键不会关闭我的表单(自定义消息框),也不会关闭 Alt+F4。我想知道我如何具体地只防止 Alt+F4 关闭而不是 Close() 关闭。请我宁愿不使用 ModifierKeys 因为它不是处理这种情况的最合适也不是最聪明的方法。

最佳答案

自己处理 Atl+F4 并将其设置为已处理。

在表单构造函数中先设置

this.KeyPreview = true;

然后处理keyDown事件
 private void Form1_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.Alt && e.KeyCode == Keys.F4)
     {
         e.Handled = true;
     }

 }

关于c# - 如何使用 alt + F4 防止任何表单关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50456000/

10-13 06:17