我正在尝试在特定表单打开时用户将焦点返回到Access应用程序时调用事件。以下事件似乎根本没有发生。
Private Sub Form_GotFocus()
Call crtListDirectory
End Sub
是否有任何机构对如何触发此事件以及何时/如何实际触发Form_GotFocus事件有任何想法。
提前感谢任何帮助
诺尔
答案 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
这一切都非常非常粗糙,但是它给你一些乱七八糟的东西。