6

Alt+を実行してもフォームが閉じないようにしたいのですが、同じフォームからorが呼び出されたF4場合は、フォームを閉じる必要があります。Application.Exit()this.Close

私は試しCloseReason.UserClosingましたが、まだ助けにはなりません。

4

4 に答える 4

20

Alt+イベントのみを除外する必要がある場合F4(クローズボックスをクリックしたままにthis.Close()Application.Exit()て、通常どおりに動作させる必要がある場合)、次のことを提案できます。

  1. フォームのKeyPreview プロパティを に設定しtrueます。
  2. フォームFormClosingKeyDownイベントを接続します。

    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;
    }
    
于 2010-04-15T09:25:58.130 に答える
3

以下のように、 Form_Keydown EventHandlerでSuppressKeyPressプロパティを true に設定することで、非常に簡単に実行できます。

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

        }

これにより、同じ eventHandler またはその他の方法で SuppressKeyPress プロパティを false に設定して、アクティブなフォームを閉じることもできます。

于 2012-05-14T16:06:37.063 に答える
0

Form の KeyPreview プロパティを true に設定し、OnProcessCmdKey メソッドをオーバーライドして、Alt+F4 ホットキーをキャプチャします。

于 2010-04-15T08:23:59.723 に答える
0

CloseReason をどのように使用しましたか?

ここのサンプル コードを参照してください: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

フォームのクローズを停止するには、渡された FormClosingEventArgs オブジェクトの Cancel プロパティを設定する必要があります。

于 2010-04-15T08:28:03.060 に答える