在同一个Form中,有几个文本框和几个按钮,现在不管光标在哪里,只要键盘按下,抓住Tab键,我试过用
Form_KeyDown ,按键时没有触发,请教各位,有什么办法吗? 谢谢了..

解决方案 »

  1.   

    在form_load里加入
    me.keypreview=true
      

  2.   

    多谢xiaoxiaonline(webbug),不过好象还是不行啊,加上Me.KeyPreview = True其他的键可以响应,TAB键好象不行..
      

  3.   

    'In a form, called Form1
    Private Sub Form_Load()
        'set a keyboard hook
        hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, App.hInstance, App.ThreadID)
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        'remove the windows-hook
        UnhookWindowsHookEx hHook
    End SubOption Explicit'In a module
    Public Const WH_KEYBOARD = 2
    Public Const VK_SHIFT = &H10
    Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
    Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
    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
    Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
    Public hHook As Long
    Public Const WM_KEYUP = &H101Public Function KeyboardProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Dim lstrFlag As String
        'if idHook is less than zero, no further processing is required
        If idHook < 0 Or idHook = 3 Then
            'call the next hook
            KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
        Else
            lstrFlag = Left$(Format$(DEC_to_BIN(lParam), String(32, "0")), 1)
            If lstrFlag = "0" Then  'down
                If wParam = vbKeyTab Then
                    Form1.Print "Tab down ..."
                End If
            Else    'up
                If wParam = vbKeyTab Then
                    Form1.Print "Tab up ..."
                End If
            End If
            'call the next hook
            KeyboardProc = CallNextHookEx(hHook, idHook, wParam, ByVal lParam)
        End If
    End Function
    Public Function DEC_to_BIN(Dec As Long) As String
        DEC_to_BIN = H_To_B(Hex$(Dec))
    End Function
    Public Function H_To_B(ByVal Hex As String) As String
        Dim i As Long
        Dim B As String
        Hex = UCase(Hex)
        For i = 1 To Len(Hex)
            Select Case Mid(Hex, i, 1)
                Case "0": B = B & "0000"
                Case "1": B = B & "0001"
                Case "2": B = B & "0010"
                Case "3": B = B & "0011"
                Case "4": B = B & "0100"
                Case "5": B = B & "0101"
                Case "6": B = B & "0110"
                Case "7": B = B & "0111"
                Case "8": B = B & "1000"
                Case "9": B = B & "1001"
                Case "A": B = B & "1010"
                Case "B": B = B & "1011"
                Case "C": B = B & "1100"
                Case "D": B = B & "1101"
                Case "E": B = B & "1110"
                Case "F": B = B & "1111"
                Case Else
                    B = B & Mid(Hex, i, 1)
            End Select
        Next i
        While Left(B, 1) = "0"
            B = Right(B, Len(B) - 1)
        Wend
        H_To_B = B
    End Function