第10章键盘与鼠标事件过程教案讲稿田.docx
《第10章键盘与鼠标事件过程教案讲稿田.docx》由会员分享,可在线阅读,更多相关《第10章键盘与鼠标事件过程教案讲稿田.docx(16页珍藏版)》请在冰豆网上搜索。
第10章键盘与鼠标事件过程教案讲稿田
课堂教学设课堂教学设计表
周次
第 周,第次课年月日
章节名称
第十章键盘与鼠标事件过程
教
学
目
标
通过本节内容的学习,达到以下教学目标:
1、掌握KeyPress事件的定义,参数的使用
2、KeyDown和KeyUp事件的定义,参数的使用
3、响应鼠标事件的定义
4、鼠标光标的形状定义
5、鼠标拖放事件的定义
学习内容和学习者分析
本次课初学者而言有一定的难度,需要多讲解实例使同学们加深印象,便于记忆和应用。
项目
内容
重点难点解决措施/提问结论
教学重点
本章内容对学生来讲全是必须掌握的新知识。
详讲多练。
教学难点
Keycode与KeyAscii的用法区别,组合键的定义
多分析实例。
课堂提问
具体情况具体对待,因学生而异。
教学方法
启发式教学,理论与实践相结合。
教学设备
多媒体教室
教学后记
课
堂
教
学
过
程
结
构
的
设
计
一、组织教学
二、新课导入
三、教学目标
1、掌握KeyPress事件的定义,参数的使用
2、KeyDown和KeyUp事件的定义,参数的使用
3、响应鼠标事件的定义
4、鼠标光标的形状定义
5、鼠标拖放事件的定义
四、教学内容
第10章键盘与鼠标事件过程
§10.1KeyPress事件
§10.2KeyDown和KeyUp事件
§10.3响应鼠标事件
§10.4鼠标光标的形状
§10.5拖放
五、本次课小结
六、布置作业
教材后的习题全部完成。
[教学内容*讲稿部分]
第10章键盘与鼠标事件过程
驱动VB应用程序运行的主要动力是事件响应。
在VB响应的所有事件中,数目最多也最重要的是对键盘和鼠标的响应事件,因为键盘和鼠标是用户和应用程序交互的主要工具。
下面系统介绍鼠标和键盘常用事件的原理和使用技巧。
§10.1KeyUp和KeyDown
常用的键盘事件主要有KeyPress,KeyUp和KeyDown。
KeyPress事件:
用户按下某ASCII字符的对应键,因此它不是对所有的键盘码均响应,比如键盘上的删除键。
该事件可用于窗体、复选框、组合框、命令按钮、列表框、图片框、文本框、滚动条及与文件有关的控件。
当按下某个键时,所触发的是拥有输入焦点的那个控件的KeyPress事件。
1.焦点处理
窗体或控件(对象)的焦点是对象活动的标志,在Windows应用中,可以同时运行几个应用程序,但只有具有焦点的应用程序才有活动标题栏,才能接受用户输入。
在同一窗体中,在某一时刻,只有一个控件或窗体获得焦点。
也只有获得焦点的窗体或控件才能接受键盘事件。
所以在处理键盘事件前,应首先对焦点进行处理。
实现控件焦点的两种方法
(1)SetFocus方法
在程序运行时,通过鼠标选择操作或控件的SetFocus方法实现。
VB所提供的标准控件一般都有一个SetFocus方法。
通过该方法可以把焦点赋予指定的控件,是一种灵活的焦点控制方法。
比如希望在程序运行期的某个阶段,使某个控件获得焦点被激活,可使用以下代码:
控件名.SeFocus
(2)利用Tab控制键
VB所有可被设置焦点的控件均具有一个TabIndex属性。
默认情况下,在窗体上创建的第一个控件的TabIndex的值为0,第二个控件的TabIndex的值为1,以此类推。
可按预先设计好的顺序,改变控件的TabIndex的值,这样就可以在程序运行期间,通过Tab键使焦点按TabIndex的值从小到大的顺序进行切换。
如果不希望使某些控件获得焦点,就可以把该控件的TabStop属性值设置为False。
如果控件不可视(Visible=False)或不可用(Enabled=False),也不可能获得焦点了。
2.KeyPress事件的格式和应用
以Text1控件为例:
(1)用于单个控件
PrivatesubText1_KeyPress(KeyAsciiAsInteger)
EndSub
(2)用于控件数组
PrivatesubText1_KeyPress(IndexAsInteger)
EndSub
KeyPress事件发生于KeyDown和KeyUp之间,它只有一个KeyAscii参数,反映了用户通过键盘输入的字符的ASCII码。
按键
键码常
ASCII码
数字是否相等
BackSpace
vbKeyBack
8
是
Enter
vbKeyReturn
13
是
Space
vbKeySpace
33
是
Tab
vbKeyTab
9
是
Esc
vbKeyEscape
27
是
A~Z
vbKeyA~vbKeyZ
65~90
是
a~z
vbKeyA~vbKeyZ
97~122
否
.
vbKeyDecimal
46
否
0~9
vbKey0~vbKey9
48~57
是
Delete
vbKeyDelete
——
——
F1~!
F12
vbKeyF1~vbKeyF12
——
——
当需要处理标准ASCII字符时可使用这个事件,但要处理扩展字符键、组合键和定位键时,则只能使用KeyDown和KeyUp事件。
例如:
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
If(KeyAscii<48)Or(KeyAscii>57)Then
PrintChr(KeyAscii);
EndIf
EndSub
2.KeyPress事件的格式和应用
常用键盘码与ASCII码的对应关系
键码未必都有对应的ASCII码。
A和a的ASCII码不同,但它们在键盘上是一个按键,因此键码是一样的。
小节:
利用KeyPress事件可以对输入的值进行限制;
利用KeyPress事件可以捕捉击键动作;
在KeyPress过程中可以修改KeyAscii变量的值。
如果进行了修改,VisualBasic控件中输入修改后的字符,而不是用户输入的字符。
在默认情况下,控件的键盘事件优先于窗体的键盘事件。
因此在发生键盘事件时,总是先激活控件的键盘事件。
如果希望窗体先接收键盘事件,则必须把窗体的KeyPreview属性设置为True,否则不能激活窗体的键盘事件。
习题
1.键盘事件的执行顺序是()。
A.KeyPress,KeyDown,KeyUp
B.KeyDown,KeyPress,KeyUp
C.KeyUp,KeyDown,KeyPress
D.KeyUp,KeyPress,KeyDown
答案:
B
2.以下关于KeyPress事件过程参数KeyAscii的叙述中,正确的是()。
[2005年9月填空第29题]
A.KeyAscii参数是所按键的ASCII码
B.KeyAscii参数的数据类型为字符串
C.KeyAscii参数可以省略
D.KeyAscii参数是所按键上标注的字符
解析:
KeyPress事件带有一个参数,这个参数有两种形式。
第一种形式是IndexAsInteger,只用于控件数组;第二种形式是KeyAsciiAsInteger,用于单个控件。
参数KeyAscii是一个预定义的变量,执行KeyPress事件过程时,KeyAscii是所按键的ASCII码,并且该参数不能省略。
默认情况下,控件的健键盘事件优先于窗体的键盘事件。
若使窗体优先接收键盘事件,需将其KeyPreview属性设为True。
如果希望无论何时按下某个键,都会同时执行同一操作,而不管此时到底哪个控件具有焦点的都可以使用窗体的键盘事件。
具体方法是:
首先将窗体的KeyPreview属性设置为True,然后再编写相应的键盘事件处理程序。
3.KeyPress事件的应用举例
§10.2KeyDown和KeyUp事件
KeyDown和KeyUp事件:
按下或释放键盘上的任意键时均会触发该事件,包括Delete删除键。
计算机键盘上的每一个键均有一个键码,称为键码。
KeyCode参数返回了键盘的键码值。
通过它判断用户按下哪个键。
既可以用数字也可以利用VB提供的键码常数进行判断处理,比如vbKeyF1(F1键)、vbKeyHome(Home键)、vbKeyA(A和a键)等。
例如:
IfKeyCode=vbKeyBackThen
IfKeyCode=vbKeyDeleteThen
与KeyPress事件不同,KeyPress并不反映键盘的直接状态,而KeyDown和KeyUp事件返回的是键盘的直接状态。
换言之,KeyDown和KeyUp事件返回的是“键”,而KeyPress事件返回的是“字符”的ASCII码。
例如,当按字母键“A”时,KeyDown所得到的KeyCode码(KeyDown事件的参数)与字母键“a”是相同的,而对KeyPress来说,所得到的ASCII码不一样。
1.KeyDown和KeyUp事件的格式
KeyDown和KeyUp事件的参数也有两种形式,其中IndexAsInteger只用于控件数组,而KeyCodeAsInteger,ShiftAsInteger用于单个控件。
PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
EndSub
PrivateSubText1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
EndSub
(1)keycode参数
Keycode以“键”为准,不像keyascii以ASCII码为准。
例:
A和a的keycode值相同。
(2)Shift参数
通过该参数判断用户是否按下了Shift、Ctrl或Alt键。
例如:
IfShift=vbShiftMaskThen
IfShift=vbCtrlMaskThen
IfShift=vbAlttMaskThen
If(Shift=vbAltMask)And(KeyCode=VbKeyA)Then
转换键,指的是三个转换键的状态,包括Shift、Ctrl和Alt,这三个键分别以二进制形式表示,每个键有三位,Shift键为001,Ctrl键为010,Alt键为100;
教材例P255例§10.2、例§10.3
习题
3.在窗体上画1个文本框,其名称为Text1,然后编写如下过程:
PrivateSubText1_KeyDown(KeyCodeAsInteger,ShiftAsInteger)
PrintChr(KeyCode)
EndSub
PrivateSubText1_KeyUp(KeyCodeAsInteger,ShiftAsInteger)
PrintChr(KeyCode+2)
EndSub
程序运行后,把焦点移到文本框中,此时如果敲击“A”键,则输出结果为()
解析:
敲击“A”键的动作,首先是按下该键触发Text1_KeyDown事件,通过PrintChr(KeyCode)输出“A”;然后是松开被按下的“A”键,此时触发Text1_KeyUp事件,通过PrintChr(KeyCode+2)输出“C”。
说明:
在键盘上按下一个键总是会触发KeyDown事件、KeyUp事件和KeyPress事件。
4.在窗体上画1个命令按钮和1个文本框,其名称分别为Command1和Text1,然后编写如下代码:
DimSaveAllAsString
PrivateSubCommand1_Click()
Text1.Text=Left(UCase(SaveAll),4)
EndSub
PrivateSubText1_KeyPress(KeyAsciiAsInteger)
SaveAll=SaveAll+Chr(KeyAscii)
EndSub
程序运行后,在文本框中输入abcdefg,单击命令按钮,则文本框中显示的内容是____。
[2006年4月填空第9题]
解析:
Text1_KeyPress过程将用户在文本框中所输入的内容保存到变量SaveAll中,本例输入“abcdefg”,则SaveAll=“abcdefg”;Left(UCase(SaveAll),4)函数即为对“abcdefg”转换为大写后取前四个字母,即“ABCD”。
答案:
ABCD
§10.3响应鼠标事件
鼠标事件是VisualBasic编程中最常用到的事件,多数控件都支持鼠标操作,因此对鼠标事件进行编程是非常重要的。
鼠标事件主要有以下几种:
Click:
单击事件,即单击鼠标时发生的事件。
DblClick:
双击事件,即双击鼠标时发生的事件。
MouseDown:
鼠标按下时发生的事件。
MouseUp:
鼠标抬起时发生的事件。
MouseMove:
鼠标移动时发生的事件,对某控件的此事件进行编程,则当鼠标移过此控件时就会触发此事件,执行其相应代码。
鼠标事件的发生顺序是:
(1)首先发生的是MouseMove事件,当鼠标移动时,将会连续触发MoouseMove事件。
(2)当鼠标按下时发生MouseDown事件。
(3)鼠标松开时发生MouseUp事件。
(4)如果按住的是鼠标左键,则Click事件在MouseUp之后发生。
双击鼠标时事件发生顺序是:
(1)当鼠标按下时发生MouseDown事件。
(2)鼠标松开时发生MouseUp事件。
(3)单击鼠标发生Click事件。
(4)双击鼠标发生DblClick事件。
(5)完成鼠标双击时发生MouseUp事件。
最常用到的就是Click事件和DblClcik事件,MouseMove和douseUp事件一般用在需要对鼠标进行处理的地方。
如:
对于最常见的命令按钮,通常情况下我们使用Click事件;而在进行画图的时候,例如画一条直线,必须先按住鼠标左键,然后拖动鼠标,再松开鼠标。
在此过程中,首先触发MouseDown事件,我们可以在此事件中记录鼠标的开始位置,再对MouseUp事件进行编程,以记录鼠标的结束位置;其中还要对MouseMove事件进行编程,以在移动过程中进行处理画图操作,而不是Click或DblClick事件。
§10.4鼠标光标的形状
1.改变鼠标的形状
每个窗体和控件都具有MousePointer属性,可通过它赋予它0~15间的不同值改变鼠标形状。
既可在设计阶段进行,也可以在程序代码中改变设置。
2.使用自定义鼠标形状
如果将MousePointer属性的值设置为99,则可以使用自定义鼠标形状。
方法是:
首先找一些光标(*.cur)或(*.ico)文件,然后通过MouseIcon属性完成设置。
3.MouseDown和MouseUp事件
这两个事件主要有四个参数:
(1)Button参数
可用来区分当前鼠标的左、中、右按键,0表示按下左键,1表示按下右键,2表示按下中间键。
(2)Shift参数
可用来区分鼠标与键盘的组合,它的值等于1,表示Shift键按下,2表示Ctrl键,4表示Alt键。
(3)x,y参数
返回鼠标指针当前的位置,计量单位由窗体的ScaleMode决定。
它们的值被限定在caleHeight,ScaleWidth,ScaleLeft和ScaleTop属性所建立的坐标系内。
4.MouseDown和MouseUp事件定义
MouseUp事件,其定义如下:
PrivateSubLabell_MouseUp(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
EndS
在上面的参数中,ButtonAsInteger定义了参数Button,该参数是用于确定按下的是鼠标的左键,右键,还是中键,其取值如下表所示。
常量数值说明
VbleftButton1按下鼠标左键
VbRightButton2按下鼠标右键
VbMiddleButton4按下鼠标中键
ShiftAsInteger定义整型参数Shift,该参数用于确定键盘上Shift键、Ctrl键、Alt键是否被按下,其取值如下表所示。
常量数值 说明
VbShiftMask1按下Shift键
VbCtrlMask2按下Ctrl键
VbAltMask4按下Alt键
4.MouseDown和MouseUp事件定义
PrivateSubLabellMouseUp(ButtonASInteger,ShiftAsInteger,XaSSing,YasSingle)
IfButton=VbRightButtonThen
Msgbox(“你按下去的是鼠标右键”)
EndIf
EndSub
此段代码在鼠标抬起时执行,程序中用If条件判断语句来判断究竟是哪个键被按下。
当Button=VbRightButton成立时,即鼠标右键被按下,这时可以执行相应的操作。
PrivateSubLabellMouseUp(ButtonAsInteger,ShiftAsInteger,XasSingle)
IfShift=2Then
Msgbox(“单击鼠标时Ctrl键被按下”)
EndIf
EndSub
例题见教材P262-264
例§10.6
§10.4鼠标光标的形状
MousePointer属性可以通过代码设置,也可以通过属性窗口设置。
1.在程序代码中设置MousePointer属性
一般格式为:
对象.MousePointer=设置值
这里的“对象”可以是复选框、组合框、命令按钮、目录列表框、驱动器列表框、文件列表框、窗体、框架、图像、标签、列表框、图片框、滚动条、文本框、屏幕等。
例如,在窗体上建立一个图片框,然后编写如下的事件过程:
PrivateSubPicture1_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)
Picture1.MousePointer=4
EndSub
上述过程运行后,移动鼠标,当鼠标光标位于图片框内时,鼠标光标变为一个方块;移出图片框后,鼠标光标变为默认形状(箭头)。
2.在属性窗口中设置MousePointer属性
单击属性窗口中的MousePointer属性条,然后单击设置框右端向下的箭头,将下拉显示MousePointer的15个属性值。
如图§10.11所示。
单击某个属性值,即可把该值设置为当前活动对象的属性。
3.自定义鼠标光标
如果把MousePointer属性设置为99,则可通过MouseIcon属性定义自己的鼠标光标。
有以下两种方法:
(1)在属性窗口中定义,可首先选择所需要的对象,再把其MousePointer属性设置为“00-Custom”,然后设置MousePointer属性,把一个图标文件赋给该属性。
(2)用程序代码设置,则可先把MousePointer属性设置为99,然后再用LoadPicture函数把一个图标文件赋给MouseIcon属性。
例如:
Form1.MousePointer=99Form1.MouseIcon=LoadPicture("c:
\VisualBasic98\graphics\icons\arrows\point02.ico")
在Windows中,鼠标光标的应用有一些约定俗成的规则。
为了与Windows环境相适应,在应用程序中应遵守这些规则,主要有:
(1)表示用户当前可用的功能,如“I”形鼠标光标(属性值3)表示插入文本;十字形状(属性值2)表示画线或圆,或者表示选择可视对象以进行复制或存取。
(2)表示程序状态的用户可视线索,如沙漏鼠标(属性值11)表示程序忙,一段时间后将控制权交给用户。
(3)当坐标(X,Y)值为0时,改变鼠标光标形状。
注意,与屏幕对象(Screen)一起使用时,鼠标光标的形状在屏幕的任何位置都不会改变。
不论鼠标光标移到窗体还是控件内鼠标形状都不会改变,超出程序窗口后,鼠标形状将变为默认箭头。
如果设置“Screen.MousePointer=0”,则可激活窗体或控件的属性所设定的局部鼠标形状。
如果把MousePointer属性设置为99,则可通过MouseIcon属性定义自己的鼠标光标。
有以下两种方法:
(1)在属性窗口中定义,可首先选择所需要的对象,再把MousePointer属性设置为“00-Custom”,然后设置MousePointer属性,把一个图标文件赋给该属性。
(2)用程序代码设置,则可先把MousePointer属性设置为99,然后再用LoadPicture函数把一个图标文件赋给MouseIcon属性。
例如:
Form1.MousePointer=99Form1.MouseIcon=LoadPicture("c:
\VisualBasic98\graphics\icons\arrows\point02.ico")
§10.5拖放
在WINDOWS中,拖放是最常用的操作,VB在程序设计中能非常容易地实现这一操作,除了菜单、计时器和对话框外,其他控件在运行期间均可被拖放。
1、与拖放有关的属性:
(1)DragMode属性
该属性用来设置自动或手动拖放模式,缺省值为0(手动方式)。
属性设为1时,自动执行拖放操作。
该属性即可以在属性窗口中设置,也可以在程序中设置。
一个对象的DragMode属性值为1时,该控件不再接收Click事件和MouseDown事件。
(2)DragIcon属性
在拖动中,并非对象本身在移动,而是代表对象的图标。
即一旦拖动某个控件,该控件就变成一个图标,放下后再恢复原来控件。
DragIcon属性含有一个图标或图片的文件名,Picture1.DragIcon=load(“c:
\vb98\graphics\icons\computer\disk06.ico)
当拖动Picture1时,Picture1即变成由disk06.ico所代表的图标。
2、与拖放有关的事件
DragDrop:
把控件拖动,如松开鼠标按钮,则产生DragDrop事件,事件过程格式如下:
Sub对象名_DragOver(SourceAsControl,XAsSingle,YAssingle,StateAsInteger)
......
EndSub
该对象含有三个参数,其中Source为一个对象变量,类型为Control.该参数含有被托动对象