0

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

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

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

4

2 回答 2

2

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

关键预览属性

然后,您的上述代码将在表单上的任何位置工作。

于 2013-07-25T03:31:27.560 回答
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();
    }
}

我希望这有帮助。

于 2013-07-25T03:45:59.647 回答