代码之家  ›  专栏  ›  技术社区  ›  Rick2047

禁用alt+f4,但允许用代码关闭窗体,closeReason.userClosing不起作用。

  •  6
  • Rick2047  · 技术社区  · 14 年前

    我希望这样表格就不会关闭了 中高音 + F4 但是如果 Application.Exit() this.Close 从同一窗体调用,它应该关闭。

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

    4 回复  |  直到 9 年前
        1
  •  19
  •   Wai Ha Lee captain-yossarian from Ukraine    9 年前

    如果你需要过滤掉 中高音 + F4 仅事件(单击关闭框, this.Close() Application.Exit() 我可以建议如下:

    1. 集合形式 KeyPreview 属性到 true ;
    2. 线缆形式 FormClosing KeyDown 事件:

      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;
      }
      
        2
  •  3
  •   mahesh    12 年前

    这很容易,你可以定下来做 抑制按键 属性设置为true 形式键按下 事件处理程序如下。

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

    通过这种方式,您还可以通过在同一个事件处理程序或任何其他方式上将SuppressKeyPress属性设置为false来关闭活动窗体。

        3
  •  0
  •   Axarydax    14 年前

    通过将窗体的keypreview属性设置为true并重写onProcessCmdKey方法来捕获alt+f4热键。

        4
  •  0
  •   Mesh    14 年前

    你是如何使用CloseReason的?

    请参见下面的示例代码: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

    需要设置传递的FormClosingEventArgs对象的Cancel属性以停止窗体关闭。