How to catch a key press on a C# .NET form
I have a parent form that contains a lot of controls. What I am trying to do is filter all of the key presses for that form. The trouble is that if t开发者_开发问答he focus is on one of the controls on the form then the parent form is not getting the key press event, so how do I capture the key down event?
Set KeyPreview to true on your form and you will catch them: MSDN
This will only work on form, but not if any other component is in focus
public partial class ChildForm : Form
{
public ChildForm()
{
KeyPress += KeyPressHandler;
}
public KeyPressHandler(object sender, KeyPressEventArgs e)
{
if (_parent != null)
{
_parent.NotifyKeyPress(e);
}
}
}
This will work even when other components are in focus
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);
}
精彩评论