C#按下Esc键关闭窗体时出现问题

C#按下Esc键关闭窗体时出现问题,c#,C#,由于某种原因,我在按下Esc键时试图关闭表单时遇到问题。这个表单也有一个退出按钮,当我将代码放入退出按钮事件处理程序时,它不起作用,所以我求助于制作一个单独的事件处理程序来保存它,但它仍然不起作用 这就是我所拥有的: private void buttonExit_Click(object sender, EventArgs e) { this.Close(); } private void FormName_KeyDown(object sender, KeyEventArgs e)

由于某种原因,我在按下Esc键时试图关闭表单时遇到问题。这个表单也有一个退出按钮,当我将代码放入退出按钮事件处理程序时,它不起作用,所以我求助于制作一个单独的事件处理程序来保存它,但它仍然不起作用

这就是我所拥有的:

private void buttonExit_Click(object sender, EventArgs e)
{
    this.Close();
}

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

只需将表单的
Cancel
按钮设置为
buttonnexit
。它是
表单
上的一个属性。然后您可以删除所有代码。

只需将表单的
取消
按钮设置为
按钮下一步即可。它是
表单
上的一个属性。然后你可以去掉所有的代码。

你的代码是正确的。 可能您没有将表单的keydown事件映射到表单设计上的事件处理程序方法。

您的代码是正确的。
可能您没有将窗体的keydown事件映射到窗体设计上的事件处理程序方法。

您必须首先启用windows窗体的
KeyPreview
。转到form属性并将
KeyPreview
设置为
true
。您的代码应该可以工作。

您必须首先启用windows窗体的
KeyPreview
。转到form属性并将
KeyPreview
设置为
true
。您的代码应该可以正常工作。

我想您会发现问题与表单上的焦点有关,因为此控件将接收按键事件,而不是表单上的事件

但是,如果使用


然后,该控件自动将自身硬连接到esc键

我想您会发现问题与窗体上的焦点有关,因为该控件将接收按键事件,而不是窗体上的事件

但是,如果使用

然后,这会自动将自身硬连接到esc键中

您可以尝试将表单的KeyPreview属性设置为true:否则表单将不会 当您将键盘焦点放在窗体内的控件上时,继续执行KeyDown事件

您也可以修改buttonExit按钮:将其属性DialogResult设置为Cancel 要执行转义键单击操作,请按。

您可以尝试将表单的KeyPreview属性设置为true:否则表单将不会 当您将键盘焦点放在窗体内的控件上时,继续执行KeyDown事件

您也可以修改buttonExit按钮:将其属性DialogResult设置为Cancel
要执行“单击退出”按钮。

在您的场景中,这是一种更好的方法。要揭示
KeyDown
事件解决方案不起作用的原因,请参阅。@Sinatr,当然需要利用
keydeview
。我只是说有一种更可靠的方法来完成同样的工作;无论如何,这里不需要重新发明轮子。在您的场景中,这是一种更好的方法。要揭示
KeyDown
事件解决方案不起作用的原因,请参阅。@Sinatr,当然需要利用
keydeview
。我只是说有一种更可靠的方法来完成同样的工作;正如AccessDienied在他的回答中所说的,您希望保持处理程序的原样KeyPreview命令将指示窗体监视被按下的键,其中over control具有焦点。AccessDienied在他的回答中说,您希望保持处理程序的原样KeyPreview命令将指示窗体监视正在按下的键,其中over control具有焦点