Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何关闭keydown事件中的表单?_C#_Keypress_Keydown - Fatal编程技术网

C# 如何关闭keydown事件中的表单?

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)

我有一个表单proFileDialog,它在表单mnuForm上使用ShowDialog()调用。当我按下一个给定的键时,我想关闭两个窗体。似乎我在文本框上触发messagebox并没有遇到任何问题,但在表单上,我一定是做错了什么。当我按下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();
    }
}