如下代码只有焦点在Form1上的时候才有效,如果焦点在command1或者是label1上的时候,下面的If语句将不能执行,怎么办呢?  
 
Private  Sub  Form_KeyDown(KeyCode  As  Integer,  Shift  As  Integer)  
   If  KeyCode  =  vbKeyLeft  Then  MsgBox  "Left"  
End  Sub

解决方案 »

  1.   

    这个不行,好像捕捉不到
    你在text1得keydown里就可以捕捉到了
      

  2.   

    Form的KeyPreview属性为True时是在触发本身控件的KeyDown、KeyPress、KeyUp事件之前先触发Form的这些事件。
    因为Label是没有焦点的,而Command控件就触发不了KeyDown事件,所以只要你将Form的KeyPreview属性设置为True就可以达到你的目的了!
      

  3.   

    Private Sub Form_KeyPress(KeyAscii As Integer)End Sub
      

  4.   

    不好意思,上面发错了
    应该这样
    先将me.keypreview=true
    然后在这个过程中这样做
    Private Sub Form_KeyPress(KeyAscii As Integer)
        If KeyAscii = vbKeyLeft Then MsgBox "Left"
    End Sub
      

  5.   

    对不起,我错了!
    如果你在Form中只有Command和Label这两个控件的时候就无法触发到KeyDown事件的!
    因为Label是没有焦点的,而Command控件就触发不了KeyDown事件,所以………………但是你加上一个Text控件或者其他可以触发KeyDown事件的控件的话,在那些控件上就可以执行到  If  KeyCode  =  vbKeyLeft  Then  MsgBox  "Left"  了!
      

  6.   

    要用到键盘钩子才行,例子如下
    在窗体中加入如下代码:
    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