第十二章响应鼠标和键盘事件本章要求:1.理解鼠标、键盘事件的触发机制。2.掌握鼠标的MouseDown,MouseMove,MouseUp事件中各参数的含义及编程控制。3.掌握键盘的KeyDown,KeyPress,KeyUp事件中各参数的含义及编程控制12.1鼠标事件大多数控件能够识别鼠标的MouseMove、MouseDow和MouseUp事件,通过响应这些鼠标事件,能在应用程序对鼠标位置及状态的变化作出响应操作。1.MouseMove每当鼠标指针移动到屏幕新位置时发生2.MouseDown按下任意鼠标键按钮时发生3.MouseUp释放任意鼠标键按钮时发生MouseMove、MouseDown、MouseUp三个事件的过程的语法格式如下:SubObject_MouseMove(ButtonAsInteger,ShiftAsInteger,_XAsSingle,YAsSingle)SubObject_MouseDown(ButtonAsInteger,ShiftAsInteger,_XAsSingle,YAsSingle)SubObject_MouseUp(ButtonAsInteger,ShiftAsInteger,_XAsSingle,YAsSingle)其中:1.Object是可选的一个对象表达式,可以是窗体对象和大多数可视控件。2.Button参数是表示按下或松开鼠标哪个按钮。12.1.1鼠标事件过程参数Button值参数(Button)值说明vbLeftButton1左按钮被按下vbRightButton2右按钮被按下vbMiddleButton4中间按钮被按下参数Shift值参数(Shift)值描述vbShiftMask1SHIFT键被按下vbCtrlMask2CTRL键被按下vbAltMask4ALT键被按下3.通过Shift参数表示在Button参数指定的按钮被按下或者被松开的情况下键盘的Shift、Ctrl和Alt键的状态。Ctrl、Shift、Alt三键组合使用情况如表12.14.参数X、YX,Y鼠标指针的位置,通过X和Y参数返回一个指定鼠标指针当前位置的数,X和Y的值是使用该对象的坐标系统表示鼠标指针当前位置。注意:鼠标事件被用来识别和响应各种鼠标状态,并把这些状态看作独立的事件,在按下鼠标按钮并释放时,Click事件只能把此过程识别为一个单一的单击操作。鼠标事件能够区分各鼠标按钮及键盘的SHIFT、CTRL、ALT键的状态。例使用MouseUp与MouseDown和MouseMove事件,编写一个在窗体上用鼠标绘图的简单程序。12.1.2拖放(简略介绍,一般不作要求)在运行时拖动控件,通常情况下并不能自动改变控件位置,这就必须使用VisualBasic的拖放功能,通过编程,才能实现在运行时拖动控件并改变其位置。把按下鼠标按钮并移动控件的操作称为拖动,把释放按钮的操作称为放下。12.1.3OLE拖放(简略介绍,一般不作要求)VisualBasic支持OLE拖放,使用这种强大且实用的工具,可以在其他支持OLE拖放的应用程序(如Windows资源管理器、Word和Excel等等)之间、控件之间拖放数据。12.2键盘事件在VisualBasic中,提供KeyPress、KeyDown、KeyUp三种键盘事件,窗体和接受键盘输入的控件都识别这三种事件。1.KeyPress按下对应某ASCII字符的键。2.KeyDown按下键盘的任意键。3.KeyUp释放键盘的任意键只有获得焦点的对象才能够接受键盘事件。12.2.1KeyPress事件(前已述)在按下与ASCII字符对应的键时将触发KeyPress事件。KeyPress事件过程的语法格式是:SubObject_KeyPress(KeyAsciiAsInteger)其中:例如,如果希望将文本框中的所有字符都强制转换为大写字符,则可在输入时使用此事件转换大小写:PrivateSubText1_KeyPress(KeyAsciiAsInteger)KeyAscii=Asc(Ucase(Chr(KeyAscii)))EndSubObject是指窗体或控件对象名,KeyAscii参数返回对应于ASCII字符代码的整型数值。KeyPress事件只识别Enter、Tab和Backspace键。不能能够检测其它功能键、编辑键和定位键。12.2.2KeyDown和KeyUp事件当一个对象具有焦点时按下(KeyDown)或松开(KeyUp)一个键时发生。它们报告键盘本身准确的物理状态:按下键(KeyDown)及松开键(KeyUp)。KeyDown和KeyUp事件能够检测其它功能键、编辑键和定位键。KeyUp和KeyDown事件过程的语法格式如下:SubObject_KeyDown(KeyCodeAsInteger,ShiftAsInteger)SubObject_KeyUp(KeyCodeAsInteger,ShiftAsInteger)说明:1.Keycode参数表示按下的物理键。上档键字符和下档键字符也是使用同一键,它们的Keycode值相同。keycode参数通过ASCII值或键代码常数来识别键。字母键的键代码与此字母的大写字符的ASCII值相同。所以A和a的keycode都是由Asc(A)返回的数值。在下例中用KeyDown事件判断是否按下了A键:PrivateSubText1_KeyDown(KeyCodeAs_Integer,ShiftAsInteger)IfKeyCode=vbKeyAThenMsgBoxYoupressedtheAkey.“EndifEndSubPrivateSubText1_KeyDown(KeyCodeAs_Integer,ShiftAsInteger)IfKeyCode=vbKey1Andshift=1ThenMsgBoxYoupressedthe!key.“EndifEndSub2.shift参数shift表示是在该事件发生时响应SHIFT、CTRL和ALT键的状态,它是一个整数。其含义与上一节中MouseMove、MouseDown、MouseUp事件中的shift参数完全相同。例如:下例是用Shift参数判断是否按下了字母的大写形式。PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)IfKeyCode=vbKeyAAndShift=1ThenMsgBoxYoupressedtheuppercaseAkey.EndifEndSub本章小结:作业:本章实验内容: