C# 怎样让上下左右方向键生效

本文属原创作品,转载请注明出处:

http://blog.csdn.net/liuxianan612


做C#程序处理键盘事件时肯能会发现,想让上下左右箭头控制程序却行不通(如控制贪食蛇游戏中蛇的方向),原因很简单:因为这些键是特殊键,被称为是预处理键。预处理键包括: Tab、Return、Esc 以及向上键、向下键、向左键和向右键。可以通过调用 IsInputKey 方法以确定 keyData 参数指定的键是否是控件需要的输入键。此方法在窗口消息预处理过程中调用,以确定指定的输入键是应经过预处理还是直接发送到控件。如果 IsInputKey 返回 true,则将指定的键直接发送到控件。但是,如果 IsInputKey 返回 false,则指定的键需要预处理,且仅当预处理阶段不使用时,才能发送到控件。


下面以贪食蛇小游戏为例来讲解如何设置:

 private void Form贪食蛇_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.S || e.KeyCode == Keys.Down)
                direction = "down";
            if (e.KeyCode == Keys.A||e.KeyCode==Keys.Left)
                direction = "left";
            if (e.KeyCode == Keys.D|e.KeyCode==Keys.Right)
                direction = "right";
            if (e.KeyCode == Keys.W||e.KeyCode==Keys.Up)
                direction = "up";
        }

        private void button开始_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Down||e.KeyCode==Keys.Up||e.KeyCode==Keys.Left||e.KeyCode==Keys.Right)
                e.IsInputKey = true;
        }

【说明】
点击“开始”按钮蛇开始走动,控制键的所有事件写在主窗体的KeyDown事件里面,因为点击“开始”按钮后,焦点在“开始”按钮上,所以在“开始”按钮的PreviewKeyDown事件里面将上下左右几个方向键的IsInputKey设为True。
另外还需要将主窗体的 KeyPreview 属性设置为 true,使键盘消息在到达窗体上的任何控件之前先被窗体接收。




By【刘显安】

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值