我使用了 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(使用前将#替换为@)