【问题标题】:How to close forms on a keydown event?如何在 keydown 事件中关闭表单?
【发布时间】:2023-03-14 01:33:01
【问题描述】:

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

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

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

【问题讨论】:

  • 您要关闭整个应用程序还是只关闭表单?
  • 没关系。无论你愿意教我什么。

标签: c# keypress keydown


【解决方案1】:

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

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

【讨论】:

  • 当我按下回车键时没有任何反应。
【解决方案2】:

除非我完全误解了你,否则有几种方法可以关闭这两个表单,我能想到的一种方法是将你的父表单传递给你的子表单,例如:

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();
    }
}

我希望这会有所帮助。

【讨论】:

  • 当我按下回车键时,“if (e.KeyCode == Keys.Enter)”不会触发。如果我将其切换为使用“结束”键,它就可以工作。
  • @MrBeach 你可以试试Keys.Return
猜你喜欢
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 2016-06-06
相关资源
最近更新 更多