1. ホーム
  2. c#

[解決済み] Windowsフォームを閉じるためのEscapeボタン in C#

2023-01-21 13:06:46

質問

以下のことを試してみました。

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if ((Keys) e.KeyValue == Keys.Escape)
        this.Close();
}

しかし、うまくいきません。

そこで、こんなことをやってみました。

protected override void OnKeyDown(KeyEventArgs e)
{
    base.OnKeyDown(e);
    if (e.KeyCode == Keys.Escape)
        this.Close();
}

それでも何も動かない

Windows Forms のフォームプロパティの KeyPreview は true に設定されているのですが...。何か間違ったことをしているのでしょうか?

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

イベントハンドラの割り当てが適切であるかどうかにかかわらず、常に動作します。 KeyPreview , CancelButton など。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == Keys.Escape) {
        this.Close();
        return true;
    }
    return base.ProcessCmdKey(ref msg, keyData);
}