 |
本章主要考查键盘事件与鼠标事件,包括KeyPress事件、KeyDown和KeyUp事件、鼠标事件、鼠标光标的形状与拖放等知识点。通过对历年试卷内容的分析,本章考核内容约占6%,属于一般考查对象。 10.1 键盘事件 使用键盘事件过程,可以处理当按下或释放键盘上某个键时所执行的操作。 10.1.1 考点1:KeyPress事件 当压下键盘上的某个键时,将发生KeyPress事件。该事件可用于窗体、复选框、组合框、命令按钮、列表框、图片框、文本框、滚动条及与文件有关的控件。严格地说,当按下某个键时,所触发的是拥有输入焦点(Focus)的那个控件的KeyPress事件。在某一时刻,输入焦点只能位于某一个控件上,如果窗体上没有活动的或可见的控件,则输入焦点位于窗体上。当一个控件或窗体拥有输入焦点时,该控件或窗体将接收从键盘上输入的信息。例如,假定一个文本框拥有输入焦点,则从键盘上输入的任何字符都将在该文本框中回显。 在窗体上画一个控件(指前面所讲的可以发生KeyPress事件的控件),比如文本框,并双击该控件,进入程序代码窗口后,从“过程”框中选取KeyPress,即可定义KeyPress事件过程。一般格式如下: Private Sub Text1 _ KeyPress(KeyAscii As Integer) …… End Sub KeyPress事件带有一个参数,这个参数有两种形式,第一种形式是Index As Integer,只用于控件数组;第二种形式是KeyAscii As Integer,用于单个控件。上面列出的是第二种形式。KeyPress事件用来识别按键的ASCII码。参数KeyAscii是一个预定义的变量,执行KeyPress事件过程时,KeyAscii是所按键的ASCII码。 说明: 利用KeyPress事件可以对输入的值进行限制; 利用KeyPress事件可以捕捉击键动作; 在KeyPress过程中可以修改KeyAscii变量的值。如果进行了修改,Visual Basic控件中输入修改后的字符,而不是用户输入的字符。 例10.1.1 以下关于KeyPress事件过程参数KeyAscii的叙述中,正确的是( )。[2005年9月 填空第29题] A.KeyAscii参数是所按键的ASCII码 B.KeyAscii参数的数据类型为字符串 C.KeyAscii参数可以省略 D.KeyAscii参数是所按键上标注的字符 解析:KeyPress事件带有一个参数,这个参数有两种形式。第一种形式是Index As Integer,只用于控件数组;第二种形式是KeyAscii As Integer,用于单个控件。参数KeyAscii是一个预定义的变量,执行KeyPress事件过程时,KeyAscii是所按键的ASCII码,并且该参数不能省略。 答案:A 小技巧:在默认情况下,控件的键盘事件优先于窗体的键盘事件。因此在发生键盘事件时,总是先激活控件的键盘事件。如果希望窗体先接收键盘事件,则必须把窗体的KeyPreview属性设置为True,否则不能激活窗体的键盘事件。 10.1.2 考点2:KeyDown和KeyUp事件 与KeyPress事件不同,KeyPress并不反映键盘的直接状态,而KeyDown和KeyUp事件返回的是键盘的直接状态。换言之,KeyDown和KeyUp事件返回的是“键”,而KeyPress事件返回的是“字符”的ASCII码。例如,当按字母键“A”时,KeyDown所得到的KeyCode码(KeyDown事件的参数)与字母键“a”是相同的,而对KeyPress来说,所得到的ASCII码不一样。 KeyDown和KeyUp事件的参数也有两种形式,其中Index As Integer只用于控件数组,而KeyCode As Integer,Shift As Integer用于单个控件。 说明: 参数KeyCode是按键实际的ASCII码。该码以“键”为准,而不是以“字符”为准。也就是说,大写字母与小写字母使用同一个键,它们的KeyCode相同(使用大写字母的ASCII码); 转换键,指的是三个转换键的状态,包括Shift、Ctrl和Alt,这三个键分别以二进制形式表示,每个键有三位,Shift键为001,Ctrl键为010,Alt键为100; KeyDown是当一个键被按下时所产生的事件,而KeyUp是松开被压下的键时所产生的事件。 例10.1.2 在窗体上画1个文本框,其名称为Text1,然后编写如下过程: Private Sub Text1_KeyDown (KeyCode As Integer ,Shift As Integer) Print Chr(KeyCode) End Sub Private Sub Text1_KeyUp(KeyCode As Integer,Shift As Integer) Print Chr(KeyCode+2) End Sub 程序运行后,把焦点移到文本框中,此时如果敲击“A”键,则输出结果为( )。[2006年4月 选择第29题] A.A B.A C.A D.A A B C D 解析:敲击“A”键的动作,首先是按下该键触发Text1_KeyDown事件,通过Print Chr(KeyCode)输出“A”;然后是松开被按下的“A”键,此时触发Text1_KeyUp事件,通过Print Chr(KeyCode+2)输出“C”。 答案:C 警钟长鸣:在键盘上按下一个键总是会触发KeyDown事件、KeyUp事件和KeyPress事件。 例10.1.3 在窗体上画1个命令按钮和1个文本框,其名称分别为Command1和Text1,然后编写如下代码: Dim SaveAll As String Private Sub Command1_Click() Text1.Text=Left(UCase(SaveAll),4) End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) SaveAll = SaveAll +Chr(KeyAscii) End Sub 程序运行后,在文本框中输入abcdefg,单击命令按钮,则文本框中显示的内容是____。[2006年4月 填空第9题] 解析:Text1_KeyPress过程将用户在文本框中所输入的内容保存到变量SaveAll中,本例输入“abcdefg”,则SaveAll=“abcdefg”;Left(UCase(SaveAll),4)函数即为对“abcdefg”转换为大写后取前四个字母,即“ABCD”。 答案:ABCD 小技巧:利用逻辑运算符And可以判断是否按下了某个转换键,可以在事件过程中通过判断是否按下了某个或某几个键来执行指定的操作。
| |