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 18.546 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv 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. |
Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB Tipp des Monats Dietrich Herrmann Einsatz einer DimmingForm Es wird eine Form vorgestellt, mit deren Hilfe man den gesamten Bildschirm auf verschiedene Arten mit transparenter Farbe überdecken und nur eine eigene Form im Vordergrund zeigen kann. 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. |
|||||||||||||||||



SetFocus ohne Fehlermeldung



