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

时间: 2024-10-25 01:33:23

VB编程的键盘控制的相关文章

【kinetic】操作系统探索总结(八)键盘控制

如果尝试过前面的例子,有没有感觉每次让机器人移动还要在终端里输入指令,这也太麻烦了,有没有办法通过键盘来控制机器人的移动呢?答案室当然的了.我研究了其他几个机器人键盘控制的代码,还是有所收获的,最后移植到了smartcar上,实验成功. 一.创建控制包 首先,我们为键盘控制单独建立一个包: 01.catkin_create_pkg smartcar_teleop rospy geometry_msgs std_msgs roscpp 02.catkin_make 二.简单的消息发布 在机器人仿真

用键盘控制DIV && Div闪烁

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

AS3键盘控制

第一种方式: package com.game.keymanager { import flash.display.Stage; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.utils.Proxy; import flash.utils.flash_proxy; /** * The KeyObject class recreates functionality of * Key.isDown

IOS开发学习笔记-(2)键盘控制,键盘类型设置,alert 对话框

一.关闭键盘,放弃第一响应者,处理思路有两种 ① 使用文本框的 Did End on Exit 绑定事件 ② UIControl on Touch 事件 都去操作 sender 的  resignFirstResponder #import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *txtUserName; @pro

纯js实现用键盘控制DIV上下左右+放大缩小与变色

//用键盘控制DIV,红色方块为键盘操作区域,您可以进行如下操作:左右控制;背景变为绿色;背景变为黄色;背景变为蓝色放大或缩小用键盘控制DIV,红色方块为键盘操作区域,您可以进行如下操作:  上:↑ 下:↓ 左:← 右:→  Ctrl + 1 : 背景变为绿色  Ctrl + 2 : 背景变为黄色  Ctrl + 3 : 背景变为蓝色  Ctrl + ↑ : 放大  Ctrl + ↓ : 缩小 <!-- Author: XiaoWen Create a file: 2017-01-10 19:0

JS实现用键盘控制DIV上下左右+放大缩小与变色

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

【Unity3D】使用鼠标键盘控制Camera视角(即时战略类游戏视角):缩进,拉远,旋转

今天写一个demo,要用到鼠标键盘控制三维视角,因此写了个脚本用于控制. 该脚本可以用于即时战略类游戏的视角,提供了缩进,拉伸,旋转.同时按住鼠标右键不放,移动鼠标可以实现第一人称视角的效果. 1 using UnityEngine; 2 using System.Collections; 3 4 public class CameraController : MonoBehaviour { 5 6 7 public float near = 20.0f; 8 public float far

键盘控制

先安装装turtlebot_teleop包: sudo apt-get install ros-indigo-joystick-drivers ros-indigo-turtlebot-teleop 先启动一个模拟的TurtleBot sudo apt-get install ros-indigo-joystick-drivers ros-indigo-turtlebot-teleop 启动RViz: rosrun rviz rviz -d `rospack find rbx1_nav`/sim

简单的使用键盘控制方块移动

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>键盘控制方块移动</title> <style> #box{ width: 50px; height: 50px; background-color: green; position: relative; left: 50px; top: 50p