按 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;
}
}
答案 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;
}
}