1. ホーム
  2. c#

エスケープキーを押したときにフォームを閉じるようにするには?

2023-08-06 05:16:01

質問

Windows Formsアプリケーションでボタンを押すと表示される小さなフォームがあります。

エスケープキーを押してフォームを閉じることができるようにしたいです。どうすればよいでしょうか。使用するイベントがわかりません。form_closing?

どのように解決するのですか?

フォーム上に、すでにフォームを閉じるボタンがある場合は、フォームのプロパティを設定して、これを実行することができます。

を設定します。 CancelButton のプロパティをそのボタンに設定します。

が押されたときにクリックされるボタンコントロールを取得または設定します。 Esc キーを押したときにクリックされるボタンコントロールを取得または設定します。

もし、キャンセルボタンがないのであれば、そのボタンに KeyDown ハンドラを追加し、その中で Esc キーをチェックする必要があります。

private void Form_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Escape)
    {
        this.Close();
    }
}

また KeyPreview プロパティを true に設定する必要があります。

フォーカスを持つコントロールにイベントが渡される前に、フォームがキーイベントを受信するかどうかを示す値を取得または設定します。

しかし、Gargoが指摘しているように、彼の 回答 を押すと Esc を押すと、ダイアログ内のコントロールの編集が中断され、ダイアログが閉じられるということになります。これを避けるために ProcessDialogKey メソッドを次のようにオーバーライドします。

protected override bool ProcessDialogKey(Keys keyData)
{
    if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
    {
        this.Close();
        return true;
    }
    return base.ProcessDialogKey(keyData);
}