本文属原创作品,转载请注明出处:
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【刘显安】