winform键盘操控之组合键

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键)。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值