在c#中,为一个Button添加KeyPress事件,我发现
当然下方向键 上下左右后什么事情都不做。
哪位神仙告诉我这是怎么回事啊?
小弟谢啦!!!!

解决方案 »

  1.   

    MDSDN中用说明, KeyPress 不支持方向键 ,换用KeyDownprivate void textBox3_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
        {
            MessageBox.Show("Up");
        }
        if (e.KeyCode == Keys.Right)
        {
            MessageBox.Show("Right");
        }
    }
      

  2.   

    不要用KeyPress用keyup。。        private void button1_KeyUp(object sender, KeyEventArgs e)
            {        }
      

  3.   

    看实际需求.KeyPress是不支持上,下左右的..
      

  4.   

    因为KeyPress一般是用于输入的
    也就是, 字母, 数字, 符号
      

  5.   

    哎呀,不好意思,发现问题描述错了。对不起!
    我是说的KeyDown的,
    比如下面的代码
     private void button1_KeyDown(object sender,KeyEventArgs e)
    {
      if(e.KeyCode==Keys.Up)
      {
        MessageBox.Show("keys up");
      }
      if(e.KeyCode==Keys.A)
      {
        MessageBox.Show("Keys A");
      }
    }
    结果,我按方向键,什么框也没弹出。
    而如果按下A,就有。
    当我用Form来接收KeyDown的时候,就都有反应。所以我想问的是,这是为什么?----------------
      

  6.   

    因为form里有KeyPreview属性,把它设置为true,而button里没有
      

  7.   

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
    switch (e.KeyCode)
    {
    case Keys.Up: { break; }
    case Keys.Down: { break; }}
    }
      

  8.   

    form中KeyPreview属性改为true即可
      

  9.   

    还是不行。我发现默认情况下,按钮这样的控件会接受焦点。一旦接收焦点,那么方向键就只会被用来转移焦点,根本接收不到KeyDown事件。把TabStop改为false就行
      

  10.   

    必须重写Button控件的IsInputKey方法。默认的Button在这个方法中过滤掉了方向键。
      

  11.   

    重写  protected override bool ProcessDialogKey(Keys keyData)
            {
                switch (keyData)
                {
                    case Keys.Left: MessageBox.Show("左"); break;
                    case Keys.Right: MessageBox.Show("右"); break;
                    case Keys.Up: MessageBox.Show("上"); break;
                    case Keys.Down: MessageBox.Show("下"); break;
                }
                return true;
            }
      

  12.   

    previewkeydown事件 里设置e.isputkey=true;
      

  13.   

    10楼的也太夸张了吧。要重写Button的方法岂不是要写一个类来继承Button?
    12楼的不知道previewkeydown的是哪个的,是form的还是每个button的?设置了又到哪里去判断是不是方向键呢?
    11楼的可以,非常感谢。不过,我又有新的疑问,这样重写的话,Tab键就不起作用了。我想到可能是重载没有调用父类的方法,所以加了句base.ProcessDilogKey(keyData);Tab键可以用了,就是按方向键的时候感觉很别扭。哎,真复杂啊。先结贴吧。