如何防止用户控制表单处理c#中的键盘输入(箭头键)

时间:2011-05-30 13:54:29

标签: c# .net winforms user-controls keyboard

我的usercontrol包含可以选择的其他控件,我想实现使用箭头键导航子控件的方法

问题是父控件截取箭头键并使用它来滚动它的视图我想要避免的是什么。我想解决自己对控制内容的导航问题。

我如何控制箭头键引起的标准行为?

提前致谢 MTH

2 个答案:

答案 0 :(得分:4)

这通常通过重写IsInputKey()方法来告诉您需要这些键。然而,这对于UserControl不起作用,它永远不会得到焦点,因此OnKeyDown方法永远不会运行。相反,重写ProcessCmdKey()方法,在表单看到击键之前调用它。像这样:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        switch (keyData) {
            case Keys.Left: MessageBox.Show("Left!"); break;
            case Keys.Right: MessageBox.Show("Right!"); break;
            default: return base.ProcessCmdKey(ref msg, keyData);
        }
        return true;  // used
    }

答案 1 :(得分:3)

您可以在用户控件中覆盖OnKeyDown,但这对箭头键不起作用,因为它们不是“输入键”(它们是导航键)。

要更改行为,请覆盖IsInputKey()以告知系统您要获取箭头键的事件:

    protected override bool IsInputKey(Keys keyData)
    {
        bool result = false;

        Keys key = keyData & Keys.KeyCode;

        switch (key)
        {
            case Keys.Up:
            case Keys.Down:
            case Keys.Right:
            case Keys.Left:
                result = true;
                break;

            default:
                result = base.IsInputKey(keyData);
                break;
        }

        return result;
    }