如何在keydown事件上关闭表单?

时间:2013-07-25 03:28:40

标签: c# keypress keydown

我有一个表单proFileDialog,它使用表单mnuForm上的ShowDialog()调用。当我按下给定的键时,我想关闭这两种形式。看起来我在文本框上进行这项工作以触发消息框时没有遇到任何问题,但是对于表单我必须做错了。当我按下回车键时,以下代码绝对没有任何反应。

    void proFileDialog_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode==Keys.Enter)
        {
            proFileDialog.Close();
            this.Close();
        }
    }

使用proFileDialog.KeyPreview = true时,它会对大多数键做出反应,但我没有得到对回车键或其他非字母/数字键的响应。

2 个答案:

答案 0 :(得分:2)

您需要设置表单的KeyPreview属性。设置为True后,表单将在具有焦点的控件之前接收按键事件,如下所示:

key preview property

您的上述代码随后可以在表单上的任何位置使用。

答案 1 :(得分:0)

除非我完全误解了你,否则你可以通过几种方式关闭这两种形式,我可以想到的一种方法是将你的父表单传递给你的子表单,如下所示:

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 ...
}

然后简单地关闭两个:

private void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        this.Close();
        _parentForm.Close();
    }
}

如果您要关闭整个应用程序(您可能没有),可以使用Application.Exit();

private void proFileDialog_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        Application.Exit();
    }
}

我希望这会有所帮助。