I E= T*R
GIAO TIẾP VỚI THIẾT BỊ NHẬP/XUẤT (I/O) 10.1 Tổng quát về tương tác giữa người dùng & chương trình
10.3 Giao tiếp với keyboard thông qua các đối tượng giao diện
q Mặc dù có thể có nhiều phần tử giao diện cùng được hiển thị trên màn hình tại từng thởi điểm nhưng chỉ có 1 phần tử giao diện được giao tiếp với thiết bị I/O, ta gọi phần tử giao diện này là 'active' hay được 'focus'.
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
q Liên quan đến việc ấn thả 1 phím, VB sẽ tạo ra 3 sự kiện sau đây và gởi về cho phần tử được 'focus' hiện hành :
§ KeyDown : sự kiện xảy ra khi người sử dụng bấm (ấn xuống) bất kỳ một phím nào trên bàn phím.
§ KeyUp : sự kiện xảy ra khi người sử dụng thả phím vừa ấn ra.
§ KeyPress: sự kiện xảy ra khi người sử dụng ấn/thả bất kỳ một phím nào trên bàn phím mà tạo ra được 1 ký tự ANSI.
Thủ tục xử lý sự kiện KeyDown, KeyUp & KeyPress
q Thủ tục có dạng sau :
Private SubControlName_KeyDown (KeyCode as Integer, Shift as Integer).
và
Private SubControlName_KeyUp (KeyCode as Integer, Shift as Integer).
trong đó :
§ ControlName là tên của điều khiển nhận sự kiện keydown/keyup. § KeyCode là mã "virtual code" của phím được ấn/thả.
§ Shift là giá trị miêu tả trạng thái ấn giữ các phím điều khiển (là một dãy bit với bit 0 cho phím SHIFT, bit 1 cho phím CTRL, bit 2 cho phím ALT).
q Thủ tục KeyPress có dạng sau :
Private Sub ControlName_KeyPress (KeyAscii As Integer)
trong đó :
§ ControlName là tên của điều khiển nhận sự kiện keypress. § KeyAscii là mã ký tự ANSI của phím được ấn/thả.
q Mỗi đối tượng có thủ tục xử lý biến cố riêng, thủ tục này cũng là method của đối tượng tương ứng.
Thí dụ thủ tục xử lý biến cố KeyDown của 1 textbox
Private Sub Text1_KeyDown (KeyCode As Integer, Shift As Integer)
http://www.foxitsoftware.com For evaluation only.
Dim ShiftDown, AltDown, CtrlDown, Txt ShiftDown = (Shift And vbShiftMask) > 0 AltDown = (Shift And vbAltMask) > 0 CtrlDown = (Shift And vbCtrlMask) > 0
If KeyCode = vbKeyF2 Then ' Display key combinations. If ShiftDown And CtrlDown And AltDown Then Txt = "SHIFT+CTRL+ALT+F2."
ElseIf ShiftDown And AltDown Then Txt = "SHIFT+ALT+F2."
ElseIf ShiftDown And CtrlDown Then Txt = "SHIFT+CTRL+F2."
ElseIf CtrlDown And AltDown Then Txt = "CTRL+ALT+F2."
ElseIf ShiftDown Then Txt = "SHIFT+F2." ElseIf CtrlDown Then Txt = "CTRL+F2." ElseIf AltDown Then Txt = "ALT+F2." ElseIf SHIFT = 0 Then Txt = "F2."
End If
Text1.Text = "You pressed " & Txt End If
End Sub
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
Dùng thuộc tính KeyPreview
q Thường 1 form giao diện (hộp thoại) chứa nhiều điều khiển bên trong nó Þ Khi thao tác phím trên 1 điều khiển trong form thì sự kiện sẽ gởi cho điều khiển hay form ? Để qui định cụ thể điều này, VB cung cấp thuộc tính KeyPreview cho form, ta có thể xem/hiệu chỉnh giá trị của nó nhờ lệnh gán :
FormName.KeyPreview [= boolean_expr]
trong đó :
§ FormName là tên của form liên quan.
§ boolean_expr là biểu thức luận lý có giá trị True/False. q Khi ta gán trị luận lý vào thuộc tính của form thì nếu :
§ trị = True thì form sẽ nhận và xử lý biến cố trước rồi mới tới điều khiển. § trị = False thì điều khiển nhận và xử lý biến cố, còn form thì không.