Form 的KeyPreview属性设置为True,KeyDown事件也拦截不到 Up Down Left Right Tab按键,或者 UserControl 也拦截不到,有什么方法可以实现呢?听说控件重载可以,重载的控件怎么使用呢?

解决方案 »

  1.   

    protected override void WndProc(ref Message m)
    {
    const int VK_LEFT = 0x25;
    const int VK_UP = 0x26;
    const int VK_RIGHT = 0x27;
    const int VK_DOWN = 0x28;
    const int WM_KEYDOWN = 0x0100; if (m.Msg == WM_KEYDOWN &&((int)m.WParam == VK_LEFT || (int)m.WParam == VK_UP || (int)m.WParam == VK_RIGHT || (int)m.WParam == VK_DOWN))
    {
    MessageBox.Show("按下了上下左右键");
    }
    base.WndProc(ref m); //这一步很重要。

    }
    你还可以分别来判断不同的按键。自己试试吧。
      

  2.   

    to kkk_visual(不学无术) :
    还是不行啊,除了Tab 和四个方向键其他都有反应。
    是不是和窗体上的控件有关系呢?
      

  3.   

    要让 TAB、RETURN、ESCAPE 和箭头键引发KEYDOWN事件,必须重写窗体或控件的 IsInputKey 方法,在该方法里确定是否按下了某一个特殊键,并且需要返回一个 true 值,这样就可以在KEYDOWN事件里响应方向键了
      

  4.   

    非常感谢 maybelian(maybelian) !