Haben Sie sich auch schon einmal gefragt, wie sich beim SSTab-Control die Registerkarte ausfindig machen lässt, auf der sich ein ganz bestimmtes Control befindet? Eine Möglichkeit wäre, einfach alle Controls jeder einzelnen Registerkarten des SSTab-Control zu "durchlaufen". Und damit der Anwender davon nichts merkt (Umschalten der Registerkarten), sperren wir einfach das autom. Neuzeichnen des Controls während des gesamten Vorgangs. Das Ganze sieht dann in etwa so aus: Option Explicit ' zunächst die benötigten API-Deklarationen Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hWnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Long) As Long Private Declare Function GetClientRect Lib "user32" ( _ ByVal hWnd As Long, _ lpRect As cRECT) As Long Private Declare Function RedrawWindow Lib "user32" ( _ ByVal hWnd As Long, _ lprcUpdate As cRECT, _ ByVal hrgnUpdate As Long, _ ByVal fuRedraw As Long) As Long Private Const WM_SETREDRAW = &HB Private Const RDW_INVALIDATE = &H1 Private Const RDW_ALLCHILDREN = &H80 Private Const RDW_UPDATENOW = &H100 Private Const RDW_ERASE = &H4 Private Type cRECT left As Long top As Long right As Long bottom As Long End Type ' Neuzeichnen eines Fensters sperren Private Sub LockWindow(ByVal hWnd As Long, wLock As Boolean) Dim ClientRect As cRECT If wLock = True Then SendMessage hWnd, WM_SETREDRAW, False, 0& Else SendMessage hWnd, WM_SETREDRAW, True, 0& GetClientRect hWnd, ClientRect RedrawWindow hWnd, ClientRect, 0&, RDW_ERASE Or _ RDW_INVALIDATE Or RDW_ALLCHILDREN Or RDW_UPDATENOW End If End Sub ' Sucht im SSTab nach der Registerkarte für ein bestimmten Control ' liefert -1, falls TabControl nicht Container des gesuchten Controls Public Function GetTabNumberByControlName(ByVal oTabControl As SSTab, _ ByVal vControl As Variant, _ Optional ByVal bAutoActivateTab As Boolean = True) As Long Dim lCounter As Long Dim lTab As Long Dim oControl As Control Dim bFound As Boolean bFound = False With oTabControl ' alle Controls durchlaufen For Each oControl In .Container If IsObject(vControl) Then bFound = (oControl Is vControl) Else bFound = (oControl.Name = vControl) End If ' gefunden If bFound Then If Not oControl.Container Is oTabControl Then bFound = False Else Exit For End If End If Next If Not bFound Then ' das Control ist nicht im TabControl enthalten GetTabNumberByControlName = -1 Exit Function End If ' z.Zt. aktuelles Tab sichern lTab = .Tab ' Neuzeichnen deaktivieren LockWindow .hWnd, True ' jetzt Registerkarte ausfindig machen For lCounter = 0 To .Tabs - 1 .Tab = lCounter If oControl.left > 0 Then ' Tab gefunden ... GetTabNumberByControlName = lCounter Exit For End If Next lCounter If Not bAutoActivateTab Then ' altes Tab wieder herstellen .Tab = lTab End If ' Neuzeichnen wieder einschalten LockWindow .hWnd, False End With End Function Aufrufbeispiele: Dim nTab As Long nTab = GetTabNumberByControlName(SSTab1, "Text1") Im zweiten Beispiel suchen wir nach dem Control mit dem Namen Text1 und dem Index = 2 - also nach einem Control aus einem Steuerelementfeld. In diesem Fall müssen wir anstelle des Controlnamens das Control als Objekt übergeben: Dim nTab As Long nTab = GetTabNumberByControlName(SSTab1, Text1(2)) Anmerkung: Dieser Tipp wurde bereits 9.735 mal aufgerufen.
Anzeige
![]() ![]() ![]() (einschl. Beispielprojekt!) 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. |
Neu! sevEingabe 3.0 ![]() Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Tipp des Monats 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. |