VB编程的键盘控制
在VB中,很多控件都提供了键盘输入功能(如文本框、组合框等),但它们对键盘的处理较简单,遇到复杂一点的要求即无能为力。
因而VB提供了KeyPress、KeyUp、KeyDown三种键盘事件,当用户按键时,会触发这三种事件,而且窗体和接受键盘输入的控件都识别这三种事件。
下表对这些事件作了描述:
键盘事件 | 触发原因 |
KeyPress | 按下某ASCII字符键 |
KeyDown | 按下键盘的任意键 |
KeyUp | 释放键盘的任意键 |
KeyDown和KeyUp事件提供了最低级的键盘响应。
可用这些事件检测KeyPress事件无法检测到的情况:
SHIFT、CTRL和ALT键的特殊组合。
光标控制键。
HOME、END、PAGEUP、PAGEDOWN等。
数字小键盘的数字键与打字键盘数字键的区别。
不仅响应按键操作而且响应释放键操作(KeyPress只响应按键操作)。
KeyPress事件:在按下与ASCII字符对应的键时将触发KeyPress事件。
ASCII字符集代表标准键盘的字母、数字和标点符号以及部分控制键(ENTER、TAB、BACKSPACE键等)。
KeyDown和KeyUp事件能够检测其它功能键、编辑键和光标定位键。
当处理标准ASCII字符时应使用KeyPress事件。
如果希望将输入到文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写:
Private Sub Text1_KeyPress(KeyAscii As Integer)
KeyAscii = Asc(Ucase(Chr(KeyAscii)))
End Sub
KeyAscii参数返回对应所按键的ASCII代码。
下述事件过程使用 KeyPress检测用户是否正在按BACKSPACE键:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 8 Then MsgBox "You Pressed the BACKSPACE key."
End Sub
注:BACKSPACE键的ASCII值为8。
附:常用键的Keycode值
键 | Keycode | 键 | Keycode | 键 | Keycode |
BACKSPACE | 8 | TAB | 9 | ENTER | 13 |
CAPS LOCK | 20 | SHIFT | 16 | CTRL | 17 |
PAGEDOWN | 34 | PAUSE | 19 | ESC | 27 |
SPACEBAR | 32 | END | 35 | HOME | 36 |
PAGEUP | 33 | INS | 45 | DEL | 46 |
←↑→↓ | 37-40 | 0-9 | 48-57 | A-Z | 65-90 |
F1-F12 | 112-123 | 小键盘* | 106 | 小键盘+ | 107 |
小键盘0-9 | 96-105 | 小键盘- | 109 | 小键盘/ | 111 |
小键盘ENTER | 108 |
Shift参数 :键盘事件使用shift参数来判断按下某键的同时是否按下了SHIFT、CTRL、ALT键或它们的组合。
如果按SHIFT键,则shift 为1;按CTRL键,shift为2;按ALT键,shift为3,通过键值总和来判断这些组合。
例如:同时按下SHIFT和ALT键时shift等于5(1+4)。
在使用中,可将KeyDown 与KeyUp事件及shift参数一同使用以区分字符的大小写或检测各种组合键。
例如:以下事件过程可捕获CTRL+ALT+F1并给出提示:
Private Sub Text1_Keydown(KeyCode As Integer, Shift As Integer)
If Keycode = 112 And Shift = 6 Then MsgBox "You press the CTRL+ALT+F1 Key!"
End Sub
编写窗体级键盘处理程序 :
只有获得焦点的对象才能够接受键盘事件。
当窗体为活动窗体且其上所有控件均未获得焦点时,窗体才获得焦点。
这种情况只有在空窗体或窗体上的控件都无效时才发生。
如果将窗体上的KeyPreview属性设置为True,则每个控件在识别其所拥有的KeyPress、KeyUP、KeyDown事件之前,窗体会抢先接受这些键盘事件。
当您希望无论何时按下某键都会执行同一个操作,而不管哪个控件在此时具有焦点时,这样设置KeyPreview属性极为有用。
可在"属性"窗口中或通过Form_Load过程中的代码设置窗体的KeyPreview属性为True:
Private Sub Form_Load
Form1.KeyPreview = True
End Sub
需要注意的是,当把窗体的KeyPreview属性设置为True时,窗体在控件之前识别键盘事件,但对控件来说事件仍然会发生,这可能会造成一次按键触发多个不同的处理。
为防止这种情况,可在窗体键盘事件过程结束前将KeyAscii或KeyCode重置为0。
例如:在窗体上将ENTER键捕获并处理后,把KeyAscii或KeyCode设置为0,则控件在自己的键盘事件过程中将无法识别按下的ENTER键,因而控件的键盘事件过程也不被调用。
设计一个窗体和文本框以及其它控件,无论焦点在哪个控件,按下CTRL+P即让文本框显示"Hello!";按下ALT+C 清除文本框;按下F10结束程序。
Private Sub Form_Load()
Form1.KeyPreview = True
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 80 And Shift = 2 Then Text1.Text = "Hello!"
If KeyCode = 67 And Shift = 4 Then Text1.Text = ""
If KeyCode = 121 Then End
End Sub
VB编程的键盘控制的更多相关文章
- 【kinetic】操作系统探索总结(八)键盘控制
如果尝试过前面的例子,有没有感觉每次让机器人移动还要在终端里输入指令,这也太麻烦了,有没有办法通过键盘来控制机器人的移动呢?答案室当然的了.我研究了其他几个机器人键盘控制的代码,还是有所收获的,最后移 ...
- 【Unity3D】使用鼠标键盘控制Camera视角(即时战略类游戏视角):缩近,拉远,旋转
今天写一个demo,要用到鼠标键盘控制三维视角,因此写了个脚本用于控制. 该脚本可以用于即时战略类游戏的视角,提供了缩进,拉伸,旋转.同时按住鼠标右键不放,移动鼠标可以实现第一人称视角的效果. usi ...
- 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
package com.lw.HomeWork1;//包名 2 import java.util.Scanner; public class Demo18 { /** * @param args */ ...
- 键盘控制div移动
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- js键盘控制div移动,解决停顿问题
问题版本代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <html> &l ...
- VB编程技巧推荐
VB编程技巧推荐 1.zyl910的专栏——理论水平高 用VB写高效的图像处理程序 V2.0 优化分支代码——避免跳转指令堵塞流水线 2.Laviewpbt的专栏 —— 有很多算法的代码,实用性高 ...
- JS实现用键盘控制DIV上下左右+放大缩小与变色
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- OpenGL之路(八)加入�光照效果和键盘控制
在opengl中加入�光照的效果,可用键盘控制放大缩小 w键放大 s键缩小 d键开关灯 预览效果例如以下: 源代码例如以下: #include <gl/glut.h> #include & ...
- ARM开发(3)基于STM32的矩阵键盘控制蜂鸣器
一 矩阵键盘控制蜂鸣器原理: 1.1 本实验实现8*7矩阵键盘上按键控制蜂鸣器响. 1.2 实验思路:根据电路图原理,找出矩阵键盘行列所对应的引脚,赋予对应的按键值,然后控制蜂鸣器响. 1.3 ...
随机推荐
- Less:优雅的写CSS代码
css是不能够定义变量的,也不能嵌套.它没有编程语言的特性.在项目开发中,常常发现有很多css代码是相同的,但我们通常都是复制然后粘贴. 举个例子:假设h5应用里主题色是#FF3A6D,可能用于文字或 ...
- 洛谷P2256 一中校运会之百米跑
题目背景 在一大堆秀恩爱的**之中,来不及秀恩爱的苏大学神踏着坚定(?)的步伐走向了100米跑的起点.这时苏大学神发现,百米赛跑的参赛同学实在是太多了,连体育老师也忙不过来.这时体育老师发现了身为体育 ...
- 已知空间三个点,解算外接圆圆心坐标,C++编程实现
struct PT3 { double x, y, z; }; int solveCenterPointOfCircle(std::vector<PT3> pt, double cente ...
- JavaScript-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- vim修改文字编码
在Vim中查看文件编码 :set fileencoding 即可显示文件编码格式.如果你只是想查看其它编码格式的文件或者想解决 用Vim查看文件乱码的问题,那么在~/.vimrc 文件中添加以下内容: ...
- 用vue.js学习es6(三):数组、对象和函数的解构
一.数组的解构: 以前的方式: var arr = [1,2,3]; console.log(arr[0]); //1 console.log(arr[1]); //2 现在的方式: var [a,b ...
- Git 耍不起来啊
1. $ git clone https://******.git Cloning into 'dt-engine-server'...fatal: unable to access 'https: ...
- webfrom 总结
网上看了很多理论,然而知易行难.在实际工作中还是存在很多问题. 下面是使用webform过程中的总结. 1.不使用服务端控件 表单有post和get两种方法,可以通过 form methed='pos ...
- 安装了ruby后怎么安装sass
在命令行中输入 ruby -v 查看版本号 先移除默认的https://rubygems.org源,命令为gem sources --remove https://rubygems.org/,按回车 ...
- ReactNative 根据scrollView/listview滑动距离动态修改NavBar颜色
我们常见某些APP上滑的时候,NavBar颜色会从透明渐变为某种颜色 原理非常简单,根据scrollView的回调动态修改NavBar的透明度即可. 在RN中,尤其是ListView中这个回调不是很好 ...