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.236 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
sevAniGif (VB/VBA) ![]() Anzeigen von animierten GIF-Dateien Ab sofort lassen sich auch unter VB6 und VBA (Access ab Version 2000) animierte GIF-Grafiken anzeigen und abspielen, die entweder lokal auf dem System oder auf einem Webserver gespeichert sind. Tipp des Monats ![]() Dieter Otter Beliebige Zeichen am Anfang und Ende eines Strings entfernen Mit der Trim-Funktion lassen sich nicht nur Leerzeichen, sondern bei Bedarf auch beliebige Zeichen entfernen. TOP Entwickler-Paket ![]() TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
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. |