winform键盘操控之升级操作

1. 键盘事件引子

  • winform的每一个窗体中,都有三个事件,分别是:KeyDown KeyPress KeyUp。其中,KeyDownKeyUp用的是KeyCode跟键盘上面的每一个按键相互对应,它对应着Key的枚举,使用极其方便,而KeyPress则是使用编码,区分大小写,在组合键操控时使用不方便。因此,我们来使用KeyDown事件来设置窗体的快捷键,以及使用组合键进行窗体游戏的制作。

2. 键盘事件组合键操控之特殊组合键

  • 在快捷键中,我们一般使用Ctrl与其它的键对窗体来进行特殊操控!例如QQ的提取消息,便是Ctrl+Alt+Z三个组合键来进行的,在我们的项目开发之中,我们也可以利用组合键来对我们的窗体进行快捷操控!
  • 示例
private: System::Void btn_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {if (e->Control == true && e->Alt == true && e->KeyCode == Keys::A) {btn->Top += 10;}}

这时窗口里面的Button按钮btn在遇到Ctrl+Alt+A组合键的时候,会向下移动10个像素。
类似于Ctrl,Alt,Shift与其他的键实行的组合键,即可使用此种方法实现。

3. 键盘事件组合键操控之普通组合键

  • 在游戏开发之中,我们会遇到A+B这样的普通键进行组合,但是这样子,利用上面的方法是不可行的!
private: System::Void btn_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {if (e->KeyData == Keys::A && e->KeyData == Keys::B) {btn->Top += 10;}}

这样子开发出来的窗体,即便是使用A+B的组合键,也无法是Button按钮的KeyDown事件触发。因为e->KeyData不可能即是A也是B就类似于以下代码中if不可能执行。

if(a == 1 && a == 2){cout << "作者真丑!!!" << endl;
}

if语句永远不可能去执行!其中一个原因是因为a不可能同时为1和2,第二个原因作者是帅~!
所以我们需要另辟蹊径。

  • 思路: 我们可以设置两个布尔值,记录两个键的按下事件,按下的时候改变为true,释放键盘的时候改变为false。当俩个键的布尔值均为true的时候,我们既可以触发组合键的事件!
  • 示例
          bool a = false;bool b = false;private: System::Void btn_KeyDown(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {if (e->KeyData == Keys::A) {a = true;}if (e->KeyData == Keys::B) {b = true;}if (a&&b) {btn->Top -= 10;}}private: System::Void btn_KeyUp(System::Object^  sender, System::Windows::Forms::KeyEventArgs^  e) {if (e->KeyData == Keys::A) {a = false;}if (e->KeyData == Keys::B) {b = false;}}

类似于以上,既可实现普通组合键事件。
当我按下键盘上的A+B键位,则会触发Button按钮的移动事件。这样子,便完成了普通组合键事件的编程!

4.KeyCode与KeyData的区别

  • KeyCode最为常用,记录了键盘上按了哪个键,当使用组合键时如Ctrl+a,其值是A
  • KeyData可以记录组合键,当使用组合键时如Ctrl+A时,其值为A,ctrl
  • KeyValue则是KeyCode的数字值,当使用组合键时如Ctrl+A时,其值为65(A),注意不是97(a);
    注意:这三个属性对于字母键只记录其大写的值(不管你是否开启了Caps Lock或是按下Shift键)。

winform键盘操控之组合键相关推荐

  1. 蓝牙HID驱动:某键盘,Fn组合键,小概率无响应,普通Keyboard功能正常。

    蓝牙HID驱动:某键盘,Fn组合键,小概率无响应,普通Keyboard功能正常. 分析:同平台产品ABC,A搭配定制键盘,有该问题,B,C均无此问题. 初步判断为A搭配的键盘有问题.但看了HCI lo ...

  2. winform屏蔽Alt+F4组合键以防止用户关闭对话框

    winform屏蔽Alt+F4组合键以防止用户关闭对话框,屏蔽Alt + F4的方法有很多,这里列出了一个比较简单而奏效的方法. 1. 捕获窗体的KeyDown事件 给窗体添加KeyDown事件,然后 ...

  3. C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)

    1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加:  2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .K ...

  4. 键盘上什么组合键表示热启动计算机,什么是电脑热启动?电脑怎么热启动

    什么是电脑热启动? 电脑热启动又称键盘启动,在不断电状态下(即开机状态下)进行的电脑程序启动,就叫做电脑热启,也可以简化为热启动. 电脑怎么热启动? 电脑在DOS状态下运行时,即同时按下键盘上的Ctr ...

  5. Qt模拟键盘按键与组合键

    Tab键: QKeyEvent tabKey(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);QCoreApplication::sendEvent(th ...

  6. js简单的设置快捷键,hotkeys捕获键盘键和组合键的输入

    设置快捷键 这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb). hotkeys on Github hotkeys预览 __ __ __ | ...

  7. js检测键盘组合键,禁止F12

    js检测键盘组合键ctrl+p js检测键盘组合键ctrl+d js检测键盘组合键ctrl+s js禁止F12 体验地址:点击在线体验 <!DOCTYPE html> <html l ...

  8. 中英文标点符号切换的组合键_最全的键盘各键及组合键功能说明,建议收藏

    点击上面"蓝字"关注人民书写 键盘是最常用的输入设备,通过键盘可以将汉字.英文字母.数字.标点符号等输入到计算机中,从而向计算机发出命令.输入数据.那么键盘分为几个功能区?各键的功 ...

  9. 中英文标点符号切换的组合键_最全的键盘各键及组合键功能说明,好好学习

    键盘是最常用的输入设备,通过键盘可以将汉字.英文字母.数字.标点符号等输入到计算机中,从而向计算机发出命令.输入数据.那么键盘分为几个功能区?各键的功能是什么呢?组合键又有什么功能呢?下面就分别予以说 ...

  10. 键盘组合键映射_如何在键盘上重新映射Office键

    键盘组合键映射 The Office Key is a new key that you'll find on Microsoft keyboards. It lets you quickly lau ...

最新文章

  1. QIIME 2用户文档. 21图形界面q2studio(2019.7)
  2. python中bind的用法_JS中的apply、call和bind的用法和区别
  3. 保证业务高效运营 专有云虚拟网络是关键
  4. View和ViewGroup的层次关系
  5. _Linux进程信号详解
  6. MFC 设置应用程序开机启动并设置运行路径
  7. bash shell 快捷键
  8. 异步fifo_面试必杀技:异步FIFO(上) CDC的那些事(5)
  9. sqlite:WAL模式
  10. C语言爱心动态生日快乐代码
  11. 使用Cisco思科模拟器进行三层交换机配置
  12. 十大OpenGL教程
  13. access通过身份证号提取性别_身份证号码男女函数(excel中关于18位身份证号的提取性别公式)...
  14. INTERN: A New Learning Paradigm Towards General Vision
  15. Windows平台下 C++注册表项重命名实现
  16. java postgresql date_javapostgresql时区总结
  17. 90后歌单精选100首,我有歌,你有故事吗?
  18. Linux报错: terminate called after throwing an instanc
  19. 2019计算机研究生暑期学校,2019年度VLDB暑期学校
  20. 直接插入排序顺序结构

热门文章

  1. sqllabs详解与知识点汇总(内含代码审计)
  2. js获取免费天气api
  3. 59% 的程序员曾担心自己猝死!
  4. 《鸡啄米C++编程入门系列》系列技术文章整理收藏
  5. 第七颗头骨 忘魂花 凤凰
  6. r5 5500u和r5 4600u区别有多大 r55500u和r54600u哪个好
  7. 何为挂载(mount)?
  8. 360奇酷手机显示Log
  9. 电脑桌面计算机点开一直在刷新,Win10系统桌面一直在刷新怎么办
  10. Java核心技术(进阶)