按Esc键不会触发KeyDown事件

时间:2020-10-16 06:23:11

标签: c# forms keydown

Esc 不会触发KeyDown事件。按下空格键 F 会触发事件,但 Esc 不会。

可能是什么原因?

在以下示例中,

KeyPreview设置为True

    private void form_KeyDown(object sender, KeyEventArgs e)
    {
        switch (e.KeyCode)
        {
            case Keys.Space:
                btnCreate_Click(null, null); break;
            case Keys.F:
                switchThrow(); break;
            case Keys.Escape:
                form_FormClosing(null, null); break;
        }
    }

1 个答案:

答案 0 :(得分:1)

说得通。在此处查看文档:{​​{3}}

某些键,例如 TAB RETURN ESC arrow键是由控件自动处理的。要使这些键引发KeyDown事件,必须在表单上的每个控件中覆盖IsInputKey方法。

    protected override bool IsInputKey(Keys keyData)
    {
        if (keyData == Keys.Escape)
        {
            return true;
        }
        else
        {
            return base.IsInputKey(keyData);
        }
    }

您可以处理IsInputKey事件并将PreviewKeyDown属性设置为true,而不是覆盖IsInputKey方法。有关代码示例,请参见PreviewKeyDown事件。

button1.PreviewKeyDown +=new PreviewKeyDownEventHandler(button1_PreviewKeyDown);
private void button1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Escape:
            e.IsInputKey = true;
            break;
    }
}