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.078 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 Neu! sevCoolbar 3.0 Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access |
||||||||||||||||
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. |