Um dies zu verhindern, setzen Sie den Eingabefokus mit dem Befehl SelectObject zurück:
Forms![frmUhrzeit].Visible = True 'Formular anzeigen und aktivieren
Domd.SelectObject acForm, "frmEingabe 'Formular wieder aktivieren
Mit dieser Methode entsteht allerdings ein störendes Geflacker, so dass der Fokus hin- und hergeschickt wird.
Diesem Umstand kann jedoch durch die Verwendung der bekannten Funktion SetWindowPos und einiger Konstanten abgeholfen werden.
Durch Angabe geeigneter Flags im letzten Parameter können Sie SetWindowPos dazu bringen, ein Fenster einzublenden, ohne es zu aktivieren. Dieses Verhalten wäre beispielsweise für Formulare interessant, die einen Status (z.B. die Uhrzeit) anzeigen. Folgendes Beispiel setzt die SetWindowPos-Funktion ein, um ein verborgendes Formular frmUhrzeit einzublenden, ohne dass das aktuelle Formular den Eingabefokus verliert:
Private Sub btnShowTime_Click()
FensterAktivieren Forms![frmUhrzeit]
End Sub
Die Prozedur FensterAktivieren sieht wie folgt aus:
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOACTIVATE = &H10
Declare Function SetWindowPos Lib "user32" _
Alias "SetWindowPos" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, ByVal x As Long,_
ByVal y As Long, ByVal cx As Long,
ByVal cy As Long, ByVal wFlags As Long) As Long
Public Function FensterAktivieren(F As Form)
SetWindowPos F.hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE _
Or SWP_NOMOVE _
Or SWP_NOZORDER _
Or SWP_SHOWWINDOW Or SWP_NOACTIVATE
End Function
Die Flags SWP_NOSIZE und SWP_NOMOVE sorgen dafür, dass die Größe und Position des Fensters nicht verändert werden.