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