开发者

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜