本人新手,前两天看个贪吃蛇教程,于是学习一下。
这是界面,可是开始游戏的时候,方向键的事件不会响应,而是变成焦点在几个按钮之间的切换。只有把按钮的Enable设为false才行。请问还有什么解决方法么?
求高手解答额

解决方案 »

  1.   

    在你的窗体中粘贴这个
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                return base.ProcessCmdKey(ref msg, keyData);
            }
    在这里处理键盘事件
      

  2.   


    窗体属性 KeyPreview=true 后才能接收Keydown事件
      

  3.   


    窗体属性 KeyPreview=true 后才能接收Keydown事件是这样么?还是不行额,依旧是方向键会切换按钮的选中状态
      

  4.   


    窗体属性 KeyPreview=true 后才能接收Keydown事件恩恩   成功了  可是不能检测到方向键之类的是怎么回事啊?这些键要怎么检测呢
      

  5.   

     private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyCode == Keys.Up)
                {
                    sb.Dir = (sb.Dir == Snake.SnakeBody.Direction.South) ? Snake.SnakeBody.Direction.South : Snake.SnakeBody.Direction.North;
                }
                else if (e.KeyCode == Keys.Down)
                {
                    sb.Dir = (sb.Dir == Snake.SnakeBody.Direction.North) ? Snake.SnakeBody.Direction.North : Snake.SnakeBody.Direction.South;
                }
                else if (e.KeyCode == Keys.Left)
                {
                    sb.Dir = (sb.Dir == Snake.SnakeBody.Direction.Easth) ? Snake.SnakeBody.Direction.Easth : Snake.SnakeBody.Direction.West;
                }
                else if (e.KeyCode == Keys.Right)
                {
                    sb.Dir = (sb.Dir == Snake.SnakeBody.Direction.West) ? Snake.SnakeBody.Direction.West : Snake.SnakeBody.Direction.Easth;
                }
                else e.Handled = true;
            }
      

  6.   

    我的代码是
    switch(e.KeyCode)
       {
         case Keys.Left:
                    if(current!=Direction.Right)
                            current=Direction.Left;
                    break;
         ……
        }这样不行么?还是方向键要用别的方法响应?
            
      

  7.   

    已经给你说的很明白了
    窗体里贴我给你那段就解决了。
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Up:
                MessageBox.Show("Up");
                break;
            case Keys.Down:
                MessageBox.Show("Down");
                break;
            case Keys.Left:
                MessageBox.Show("Left");
                break;
            case Keys.Right:
                MessageBox.Show("Right");
                break;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }