</p> 10.1.2 考点2:KeyDown和KeyUp事件 . X5 [9 a# }7 B& h
与KeyPress事件不同,KeyPress并不反映键盘的直接状态,而KeyDown和KeyUp事件返回的是键盘的直接状态。换言之,KeyDown和KeyUp事件返回的是“键”,而KeyPress事件返回的是“字符”的ASCII码。例如,当按字母键“A”时,KeyDown所得到的KeyCode码(KeyDown事件的参数)与字母键“a”是相同的,而对KeyPress来说,所得到的ASCII码不一样。 ( Y' b9 A# P' t" {
KeyDown和KeyUp事件的参数也有两种形式,其中Index As Integer只用于控件数组,而KeyCode As Integer,Shift As Integer用于单个控件。 % h3 d1 D7 d. G7 l- U
说明: % f9 X+ Z4 B6 y, q" T( D/ Y! [
参数KeyCode是按键实际的ASCII码。该码以“键”为准,而不是以“字符”为准。也就是说,大写字母与小写字母使用同一个键,它们的KeyCode相同(使用大写字母的ASCII码); z; _5 U) t; `. N c! @0 ]
转换键,指的是三个转换键的状态,包括Shift、Ctrl和Alt,这三个键分别以二进制形式表示,每个键有三位,Shift键为001,Ctrl键为010,Alt键为100;
4 F$ j* o0 ~- J1 L% e: g$ K) A KeyDown是当一个键被按下时所产生的事件,而KeyUp是松开被压下的键时所产生的事件。 $ _, T4 t0 H" r. b4 S, t& M" Y- w4 s
例10.1.2 在窗体上画1个文本框,其名称为Text1,然后编写如下过程: % x% c: w! A, h' G# ~/ q+ m
Private Sub Text1_KeyDown (KeyCode As Integer ,Shift As Integer)
( g* ?: ?( m0 i Print Chr(KeyCode) + {+ G }& ]* c$ \$ U' t
End Sub
/ G3 ^' l! R) n5 b2 e) T) l# L! b Private Sub Text1_KeyUp(KeyCode As Integer,Shift As Integer) 5 z8 c4 c1 [* A$ V) Y- J4 D7 r
Print Chr(KeyCode+2) $ q3 ?6 q) ^3 L D
End Sub
/ C: {0 D2 \3 O8 S0 K* T 程序运行后,把焦点移到文本框中,此时如果敲击“A”键,则输出结果为( )。[2006年4月 选择第29题]
+ z/ ]" }9 D, x A.A B.A C.A D.A 2 } F0 u$ n( t0 {2 V0 v: r. R
A B C D ( @* @. {6 p! ^* Y, Y7 i& C# s
解析:敲击“A”键的动作,首先是按下该键触发Text1_KeyDown事件,通过Print Chr(KeyCode)输出“A”;然后是松开被按下的“A”键,此时触发Text1_KeyUp事件,通过Print Chr(KeyCode+2)输出“C”。
?( N1 Z* E3 ]% e) ]$ u, X v: m* W5 b 答案:C ' g3 a$ \9 ^4 [6 R, V, k
警钟长鸣:在键盘上按下一个键总是会触发KeyDown事件、KeyUp事件和KeyPress事件。
! h% D- [% T$ t3 ?1 O+ u e1 K# G 例10.1.3 在窗体上画1个命令按钮和1个文本框,其名称分别为Command1和Text1,然后编写如下代码:
: t% l. I( l& N* H. t9 _ Dim SaveAll As String
& f4 K% N" T' y( [ Private Sub Command1_Click() 3 [# H( K) d- j
Text1.Text=Left(UCase(SaveAll),4) 9 `1 D1 R$ Q9 t5 G0 q8 e8 o6 u1 R7 l
End Sub
& v4 C3 i" S+ h, Y8 Q+ `% D9 }9 N: f1 L Private Sub Text1_KeyPress(KeyAscii As Integer) 4 N- I8 A. {7 W* F8 }: c; n- r% b
SaveAll = SaveAll +Chr(KeyAscii) 0 H. e, v2 @, Q
End Sub 9 Q% q5 P' R" c( m
程序运行后,在文本框中输入abcdefg,单击命令按钮,则文本框中显示的内容是____。[2006年4月 填空第9题]
j `# J" _$ M9 n6 D( a 解析:Text1_KeyPress过程将用户在文本框中所输入的内容保存到变量SaveAll中,本例输入“abcdefg”,则SaveAll=“abcdefg”;Left(UCase(SaveAll),4)函数即为对“abcdefg”转换为大写后取前四个字母,即“ABCD”。
9 X1 R& c2 b. R9 s 答案:ABCD
1 h' D9 d1 r' o. e2 G 小技巧:利用逻辑运算符And可以判断是否按下了某个转换键,可以在事件过程中通过判断是否按下了某个或某几个键来执行指定的操作。 |