表格GotFocus事件似乎没有触发

时间:2011-01-11 15:45:18

标签: ms-access-2007 access-vba

我正在尝试在特定表单打开时用户将焦点返回到Access应用程序时调用事件。以下事件似乎根本没有发生。

Private Sub Form_GotFocus()
    Call crtListDirectory
End Sub 

是否有任何机构对如何触发此事件以及何时/如何实际触发Form_GotFocus事件有任何想法。

提前感谢任何帮助

诺尔

1 个答案:

答案 0 :(得分:1)

访问帮助:

  

表单只有全部才能获得焦点   表单上的可见控件是   已禁用,或者没有控件   形式。

您可能想尝试激活。

编辑评论

我能看到做你想要的东西的唯一方法是使用API​​,这有点凌乱。为了演示这一点,您需要一个包含两个控件Text0和Text2的表单(这些是默认名称)。将Timer Interval设置为适合的值,比如说2000,Timer事件设置为:

Private Sub Form_Timer()
Dim lngWin As Long
Dim s As String

    'This is just a counter to show that the code is running
    Me.Text2 = Nz(Me.Text2, 0) + 1

    'API
    lngWin = GetActiveWindow()
    s = GetWinName(lngWin)

    If s = "Microsoft Access" Then
        If Me.Text0 = "Lost Focus" Then
            Me.Text0 = "Focus returned"
        End If
    Else
        Me.Text0 = "Lost Focus"
    End If

End Sub

您现在需要一个模块:

Option Compare Database

Declare Function GetActiveWindow Lib "user32" () As Integer
Declare Function GetWindowText Lib "user32.dll" Alias _
"GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As _
String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias _
"GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Function GetWinName(hw As Long)
    Dim lngText As Long ' receives length of text of title bar
    Dim strWinName As String ' receives the text of the title bar
    Dim lngWinText As Long ' receives the length of the returned string

    lngText = GetWindowTextLength(hw)
    strWinName = Space(lngText + 1)
    lngWinText = GetWindowText(hw, strWinName, lngText + 1)
    strWinName = Left(strWinName, lngWinText)
    GetWinName = strWinName
End Function

这一切都非常非常粗糙,但是它给你一些乱七八糟的东西。