ArMaN
ArMaN

Reputation: 2407

How Catch Keyup Event In User Control?

I want to catch keyup event of parent form in a usercontrol. I use ProcessCmdKey but it just give me keydown event and it doesn't raise in keyup event. How can I do it?

Update: I want to catch keyup event of form. because Control.KeyUp raised when control is focused.

public partial class ExtendedButton : Button
{
    const int WM_KEYDOWN = 0x100;

    public ExtendedButton()
    {
        InitializeComponent();
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        if (msg.Msg == WM_KEYUP && keyData == (Keys.NumPad0))
        {
            MessageBox.Show("hi");
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
}

Upvotes: 0

Views: 1163

Answers (1)

Shell
Shell

Reputation: 6849

You can create handler for Parent Form KeyUp in UserControl's OnHandleCreated override method.

Try this code

Form parentForm = null;
private void ParentForm_KeyUp(object sender, KeyEventArgs e)
{
    MessageBox.Show("HI");
}

protected override void OnHandleCreated(EventArgs e)
{
    if (DesignMode)
        return;

    base.OnHandleCreated(e);
    object parent = this;
    while (true)
    {
        parent = ((Control)parent).Parent;
        if (parent.GetType().BaseType.Name == "Form")
            break;
    }
    parentForm = (Form)parent;
    parentForm.KeyUp -= new KeyEventHandler(this.ParentForm_KeyUp);
    parentForm.KeyUp += new KeyEventHandler(this.ParentForm_KeyUp);
}

Upvotes: 1

Related Questions