Objekte, die den Fokus erhalten können, besitzen i.a.R. auch eine SetFocus-Methode, so dass man den Fokus gezielt per VB-Code auf ein bestimmtes Objekt / Control setzen kann. Was aber, wenn die Form (noch) nicht sichtbar oder das Control aktuell deaktiviert ist? Laufzeitfehler 5:
Ungütliger Prozeduraufruf oder ungültiges Argument
Klar - kann ja eigentlich auch nicht funktionieren: den Fokus auf ein Control setzen, dass noch gar nicht angezeigt wird *tststst* Was aber, wenn man im Form_Load-Ereignis den Fokus auf ein bestimmtes Control setzen möchte, ohne die TABINDEX-Reihenfolge hierfür explizit zu ändern? Nun ja: man ruft bereits im Form_Load-Ereignis die Show-Methode der Form auf und setzt danach den Fokus auf das gewünschte Control: Private Sub Form_Load() ' Form anzeigen Me.Show DoEvents ' Fokus auf TextBox setzen Text5.SetFocus ... End Sub Das funktioniert. Aber: Was, wenn es sich um eine Form handelt, die modal von einer anderen Form aufgerufen werden soll? In diesem Fall dürfen wir auf keinen Fall die Show-Methode verwenden! Und somit quittiert uns VB den Versuch den Fokus im Form_Load-Ereignis zu setzen, wieder mit obiger Fehlermeldung Eine Alternative wäre, den Fokus im Activate-Ereignis der Form auf das gewünschte Control zu setzen: Option Explicit Private bFirstTime As Boolean Private Sub Form_Load() bFirstTime = True End Sub Private Sub Form_Activate() If bFirstTime Then bFirstTime = False Text5.SetFocus End If End Sub Das funktioniert zwar auch - ist aber nicht so elegant. Eleganter geht es mit der SetFocus API-Funktion! ' In einem Modul... Option Explicit ' Benötigte API-Deklarationen Private Declare Function SetFocusAPI Lib "user32" _ Alias "SetFocus" ( _ ByVal hwnd As Long) As Long Die SetFocus-Funktion aus dem Windows-API hat gegenüber der SetFocus-Anweisung der Controls nämlich einen entscheidenden Vorteil: Mit der API-Variante kann man den Fokus auf ein Control setzen, auch wenn dieses zum Zeitpunkt des Aufrufs noch gar nicht sichtbar ist! Der Code im Form_Load-Ereignis unserer modalen Form sieht demnach wie folgt aus: Private Sub Form_Load() ' Fokus aus TextBox setzen SetFocusAPI Text5.hWnd End Sub Dieser Tipp wurde bereits 36.077 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevOutBar 4.0 Vertikale Menüleisten á la Outlook Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |