C# 如何关闭keydown事件中的表单?
我有一个表单proFileDialog,它在表单mnuForm上使用ShowDialog()调用。当我按下一个给定的键时,我想关闭两个窗体。似乎我在文本框上触发messagebox并没有遇到任何问题,但在表单上,我一定是做错了什么。当我按下enter键时,以下代码绝对不会发生任何变化C# 如何关闭keydown事件中的表单?,c#,keypress,keydown,C#,Keypress,Keydown,我有一个表单proFileDialog,它在表单mnuForm上使用ShowDialog()调用。当我按下一个给定的键时,我想关闭两个窗体。似乎我在文本框上触发messagebox并没有遇到任何问题,但在表单上,我一定是做错了什么。当我按下enter键时,以下代码绝对不会发生任何变化 void proFileDialog_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode==Keys.Enter)
void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode==Keys.Enter)
{
proFileDialog.Close();
this.Close();
}
}
使用proFileDialog.KeyPreview=true,它将对大多数键做出反应,但我不会对enter键或其他非字母/数字键做出反应。您需要设置表单的
KeyPreview
属性。将此设置为True
,窗体将在具有焦点的控件之前接收按键事件,如下所示:
您的上述代码将在表单上的任何位置工作。除非我完全误解了您的意思,否则有几种方法可以关闭两个表单,我可以想到的一种方法是将您的父表单传递给您的子表单,例如:
var pfd = new profFileDialog(this);
pfd.ShowDialog();
在您的子表单中:
private readonly mnuForm _parentForm;
public profFileDialog(mnuForm parentForm)
{
_parentForm = parentForm;
KeyPreview = true; // <-- see Simon's Answer
// other code ...
}
如果您想关闭整个应用程序(可能不需要),可以使用application.Exit()代码>:
我希望这能有所帮助。您想关闭整个应用程序还是只关闭表单?这无关紧要。无论你愿意教我什么。当我按enter键时不会发生任何事情。当我按enter键时不会触发“if(e.KeyCode==Keys.enter)”。如果我将其切换为使用“结束”键,它会工作。@MrBeach您可以尝试键。Return
private void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.Close();
_parentForm.Close();
}
}
private void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Application.Exit();
}
}