class PanelContainer:Control
{
        protected override void OnKeyDown(KeyEventArgs e)
        {
            base.OnKeyDown(e);
            MessageBox.Show(e.KeyCode.ToString());
        }
}
上面的代码除了方向键没有响应,其他的键都没有问题。请问方向键该怎么拦截?

解决方案 »

  1.   

    在按下方向键的时候没有弹出MEssageBox么?
      

  2.   

    在winform下,没问题啊namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            protected override void OnKeyDown(KeyEventArgs e)
            {
                base.OnKeyDown(e);
                MessageBox.Show(e.KeyCode.ToString()); 
            }
        }
    }
      

  3.   

    Form类没有问题啊,关键是Control类啊,我要写个控件。
      

  4.   

    把MessageBox.Show写到base.OnKeyDown的前面看看
      

  5.   

    放在前面也不行啊,而且如果从Panel继承的话,那么protected override void OnKeyDown(KeyEventArgs e) 是无效的。
      

  6.   

    万一不行,就到winProc中去,什么消息都跑不了。
      

  7.   

    可能是因为,基类Control接受到方向键消息后没有进行处理,因为他们有默认的行为,也就是支持焦点在窗体的控件之间转换
    若你要自己处理方向键,你就要重写IsInputKey方法,如下:protected override bool IsInputKey(Keys keyData)
    {
         if ((keyData & Keys.Alt) == Keys.Alt)
         {
              return false;
         }
         switch ((keyData & Keys.KeyCode))
         {
              case Keys.Up:
              case Keys.Down:                
              return true;
         }
         return base.IsInputKey(keyData);
    good luck