Forms GotFocus событие, похоже, не срабатывает - PullRequest
3 голосов
/ 11 января 2011

Я пытаюсь вызвать событие, когда пользователь возвращает фокус приложению Access, когда открыта определенная форма. Кажется, что следующее событие вообще не запускается.

Private Sub Form_GotFocus()
    Call crtListDirectory
End Sub 

Есть ли у какого-либо органа какие-либо идеи относительно того, как я мог бы инициировать это событие и когда / как событие Form_GotFocus действительно инициируется.

Заранее спасибо за любую помощь

Noel

1 Ответ

1 голос
/ 11 января 2011

Доступ к справке:

Форма может получить фокус только в том случае, если все видимые элементы управления в форме отключены или в ней нет элементов управления.

Возможно, вы захотите попробовать Activate.

РЕДАКТИРОВАТЬ комментарии

Единственный способ увидеть то, что вы, кажется, хотите сделать, - это API-интерфейсы, что несколько беспорядочно.Чтобы продемонстрировать это, вам понадобится форма с двумя элементами управления Text0 и Text2 (это имена по умолчанию).Установите интервал таймера на что-то подходящее, скажем, 2000, а событие таймера на:

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

Это все очень, очень грубо, но это дает вам повод для беспокойства.

...