无论表单上的焦点控件如何,如何捕获 Keys.F1?

2024-05-13

我使用了 KeyDown 事件和一些简单的代码,例如if (e.KeyCode == Keys.F1)捕获在表单上按下 F1 但如果表单上有一些文本框,或者表单上有一些带有 Dock Fill 的电子表格,则上面的代码将毫无用处并且不执行任何操作。但我想当用户在此表单上按 F1 时执行一些操作。那么我们如何捕获整个表单上的特定 keydown 事件(如 F1)..并且我不想转到捕获表单上所有其他控件的 KeyDown 并将它们传递给表单进行处理的路线。有没有更干净的方法来做到这一点?


是的,确实有。无论当前具有输入焦点的控件如何,表单处理按键事件的正确方法是覆盖ProcessCmdKey method http://msdn.microsoft.com/en-us/library/system.windows.forms.form.processcmdkey.aspx您的表单类别:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    if (keyData == Keys.F1)
    {
        MessageBox.Show("You pressed the F1 key");
        return true;    // indicate that you handled this keystroke
    }

    // Call the base class
    return base.ProcessCmdKey(ref msg, keyData);
}

你归来true表明您处理了击键并且don't希望将其传递给其他控件。如果你do想要将其传递给其他控件的事件处理程序,只需返回false.

你最好忽略KeyPreview财产 http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx。这在 VB 6 天中是不合时宜的,而且并不是 .NET 世界中这样做的首选方法。进一步阅读:设置 Form.KeyPreview = true 的缺点? https://stackoverflow.com/questions/2386695/disadvantage-of-setting-form-keypreview-true

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无论表单上的焦点控件如何,如何捕获 Keys.F1? 的相关文章

随机推荐