Alt+F4 を無効にしますが、コードによってフォームを閉じることは許可します。CloseReason.UserClosing は役に立ちません

StackOverflow https://stackoverflow.com/questions/2643712

質問

次のようにしてフォームが閉じないようにしたいです オルタナティブ + F4 しかし、もし Application.Exit() または this.Close 同じフォームから呼び出される場合は、閉じる必要があります。

私は試した CloseReason.UserClosing しかしまだ助けがありません。

役に立ちましたか?

解決

フィルタリングする必要がある場合 オルタナティブ + 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;
    }
    

他のヒント

これは非常に簡単にあなたが。

以下のようにセットの Form_Keydown のEventHandlerの上の真にある[ SuppressKeyPress のプロパティでそれを行うことができます
        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

これによりすることもでき、同じeventHandllerまたはその他の方法でfalseに設定SuppressKeyPress財産近くにあり、あなたのアクティブなフォームます。

trueにフォームのKeyPreviewプロパティを設定し、OnProcessCmdKeyメソッドをオーバーライドすることにより、Altキー+ F4のホットキーをキャプチャします。

あなたはCloseReasonを使用しましたか?

サンプルコードをここに参照してください。 http://msdn.microsoft.com/ EN-US /ライブラリ/ system.windows.forms.form.formclosing.aspxする

あなたは渡さFormClosingEventArgsのCancelプロパティを設定する必要があるフォームの閉鎖を停止することを目的ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top