学习:响应键盘按键

来源:互联网 发布:淘宝转人工服务电话 编辑:程序博客网 时间:2024/05/10 18:52

实现功能:


  • 当按下键盘上的按键时,触发一些“事件”。

案例:
使用键盘上的方向键或wasd来控制 label 的移动。

涉及内容:


    • KeyChar
    • KeyCode
  • 事件
    • KeyPress
    • KeyDown
    • KeyUp
  • 属性
    • form.KeyPreview

参考:C#如何关联键盘按钮,或者依次搜索MSDN的文档(需要详细了解的话建议这样做)
P.s. 如果看参考博文看得一头雾水,可以看看本博文的 问与答 ,看看能不能解决一些问题,也可以看完本博文之后在看一次参考博文。

实现步骤:

  1. 添加 Form1_Load 事件中并在内设置 Form1.KeyPreview = true

    必须这么做,否则下面的 KeyPress KeyDown KeyUp 事件无法执行

  2. 添加Form1_KeyPress 或者 Form1_KeyDown 或者 Form1_KeyUp 事件

  3. 在这些事件中使用 if 或者 switch 判断函数判断输入的是什么键,再执行什么命令

代码分析:

namespace 响应键盘按键{    public partial class Form1 : Form    {        //step是控制每一次按下按键所移动的距离        int step = 5;        public Form1()        {            InitializeComponent();        }        //窗体Form1的加载事件        private void Form1_Load(object sender, EventArgs e)        {            //必须要有,否则无法响应下面的事件            this.KeyPreview = true;        }        private void Form1_KeyPress(object sender, KeyPressEventArgs e)        {            //向左            if (e.KeyChar == 'a')                label1.Location = new Point(label1.Location.X - step, label1.Location.Y);            //向上            if (e.KeyChar == 'w')                label1.Location = new Point(label1.Location.X, label1.Location.Y - step);            //向右            if (e.KeyChar == 'd')                label1.Location = new Point(label1.Location.X + step, label1.Location.Y);            //向下            if (e.KeyChar == 's')                label1.Location = new Point(label1.Location.X, label1.Location.Y + step);        }        private void Form1_KeyDown(object sender, KeyEventArgs e)        {            //switch函数现在还没有学到,可以先看看书中P79页,注意这个函数的格式            switch(e.KeyCode) {                //Keys.Up就是指方向键的上键,下面同理                case Keys.Up:                    label1.Location = new Point(label1.Location.X, label1.Location.Y - step);                    break;                case Keys.Down:                    label1.Location = new Point(label1.Location.X, label1.Location.Y + step);                    break;                case Keys.Left:                    label1.Location = new Point(label1.Location.X - step, label1.Location.Y);                    break;                case Keys.Right:                    label1.Location = new Point(label1.Location.X + step, label1.Location.Y);                    break;            }        }    }}

注意事项:

见C#如何关联键盘按钮的注意事项

问与答:

  1. Form1_KeyPress 事件中使用 KeyCode 可以吗?
    不可以。因为 KeyCode 是属于 KeyEventArgs 的,KeyChar 是属于 KeyPressEventArgs 的,不是属于你的东西不能用。
  2. 我记不住谁属于谁啊?
    在vs中,输入的时候可以先输入 Key ,如果是属于他的就会自动弹出来啦,不是属于他的是不会显示出来的。还有,你可以将鼠标放到 KeyCode 或者 KeyChar 上面查看他们的属性,会有显示他们的从属关系。切记,是在vs中,在这里是不显示,这个办法在代码改错中也是很有用的。
  3. KeyEventArgs 这些是什么鬼?
    英文翻译为“事件参数”(自己翻的,可能有错)。看上面的代码分析中可以看到 private void Form1_Load(object sender, EventArgs e) 等等事件后面的括号中会有一个类似 EventArgs e 的东西,就是这个东西,你可以像问题2那样将鼠标放到上面查看一下,或者到MSDN中查看详细的概念。
  4. 参考的那篇博客中那些数字是什么鬼?
    那些是ASCII,可以看一下书本56页或者上网查看一下,不过我不是很清楚博主在博主在博文中使用这个的作用。

建议:

  1. 不要直接复制上面的代码,理解之后再盲打一次来实现
  2. 问与答 中的第二问中的第二个建议十分有用
  3. 要养成查看MSDN里面的文档的习惯
  4. 我也是初学,极有可能会出现错误,如果你发现了,不妨在评论区或私信告诉我,十分感谢
  5. 有什么好的想法或建议也可以在评论区或私信告诉我
1 0
原创粉丝点击