如下代码只有焦点在Form1上的时候才有效,如果焦点在command1或者是label1上的时候,下面的If语句将不能执行,怎么办呢?
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyLeft Then MsgBox "Left"
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyLeft Then MsgBox "Left"
End Sub
你在text1得keydown里就可以捕捉到了
因为Label是没有焦点的,而Command控件就触发不了KeyDown事件,所以只要你将Form的KeyPreview属性设置为True就可以达到你的目的了!
应该这样
先将me.keypreview=true
然后在这个过程中这样做
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyLeft Then MsgBox "Left"
End Sub
如果你在Form中只有Command和Label这两个控件的时候就无法触发到KeyDown事件的!
因为Label是没有焦点的,而Command控件就触发不了KeyDown事件,所以………………但是你加上一个Text控件或者其他可以触发KeyDown事件的控件的话,在那些控件上就可以执行到 If KeyCode = vbKeyLeft Then MsgBox "Left" 了!
在窗体中加入如下代码:
Option ExplicitPrivate Sub Form_Load()
hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf HookProc, _
App.hInstance, App.ThreadID)
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnhookWindowsHookEx hHookEnd Sub添加一模块,加入如下代码:
Option Explicit
Public Const VK_UP As Long = &H26
Public Const VK_DOWN As Long = &H28
Public Const VK_LEFT As Long = &H25
Public Const VK_RIGHT As Long = &H27Public Declare Function CallNextHookEx Lib "user32" _
(ByVal hHook As Long, _
ByVal ncode As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long
Public Declare Function SetWindowsHookEx Lib "user32" _
Alias "SetWindowsHookExA" _
(ByVal idHook As Long, _
ByVal lpfn As Long, _
ByVal hmod As Long, _
ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As LongPublic Const WH_KEYBOARD As Long = 2
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
Public Const HC_SKIP = 2
Public Const HC_GETNEXT = 1
Public Const HC_ACTION = 0Public hHook As LongPublic Function HookProc(ByVal iCode As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
If iCode = HC_ACTION Then
Select Case wParam
Case VK_UP
Debug.Print "up"
Case VK_DOWN
Debug.Print "down"
Case VK_LEFT
Debug.Print "left"
Case VK_RIGHT
Debug.Print "right"
Case Else
Debug.Print "vk code =" & Str(wParam)
End Select
End If
HookProc = CallNextHookEx(hHook, iCode, wParam, lParam)End Function