Heute möchten wir Ihnen einen Weg zeigen, wie sich einzelne oder alle Registerkarten eines TabStrip-Controls disablen lassen - und zwar auch optisch, so dass der Anwender dies sofort erkennen kann. Im Normalfall werden Controls, die disabled sind, grau angezeigt. Leider trifft dies nicht für das TabStrip-Control zu. Setzt man die Enabled-Eigenschaft auf FALSE, sind die einzelnen Reiter nicht mehr auswählbar, aber der Anwender kann dies leider nicht erkennen, da die Texte weiterhin schwarz angezeigt werden. Wie kann man die Reiter aber auch optisch "disablen"? Folgende Überlegung: Wir zeichnen den Text einfach neu Und zwar in grauer Schrift. Glücklicherweise kann man jedem Reiter ein Bild zuordnen. Was liegt also näher, als die Texte der einzelnen Registerkarten als Bild zuzuordnen? Starten Sie ein neues Projekt, ziehen das TabStrip-Control auf die Form, dazu noch ein ImageList-Control, einen Command-Button und eine PictureBox mit der Eigenschaft BorderStyle = 0 und Appearance = 0. Im Form_Load Ereignis erstellen wir zunächst die einzelnen Registerkarten. Anschließend erstellen wir die Bilder, sowohl für den normalen Zustand, als auch für den disabled Zustand. Die Bilder für den "normalen" Zustand ordnen wir dann den einzelnen Registerkarten zu. Private Sub Form_Load() Dim i As Integer Dim u As Integer Picture1.AutoRedraw = True Picture1.BackColor = vbButtonFace Picture1.Visible = False ' Reiter erstellen With TabStrip1 .Tabs.Clear .Tabs.Add , , "Reiter 1" .Tabs.Add , , "Reiter 2" .Tabs.Add , , "Reiter 3" ' Bilder für die Texte erstellen und dem ' ImageList hinzufügen For i = 1 To .Tabs.Count For u = 1 To 2 Picture1.Cls Picture1.CurrentY = 45 Picture1.ForeColor = IIf(u = 1, vbButtonText, vbGrayText) Picture1.Width = .Tabs(.Tabs.Count).Width - 150 Picture1.Height = .Tabs(.Tabs.Count).Height Picture1.Print .Tabs(i).Caption ImageList1.ListImages.Add , IIf(u = 1, "e", "d") & CStr(i), _ Picture1.Image Next u Next i Picture1.AutoRedraw = False ' ImageList dem TabStrip zuweisen Set .ImageList = ImageList1 ' Beschriftung durch Bild für den ' normalen Zustand ersetzen For i = 1 To .Tabs.Count .Tabs(i).Caption = "" .Tabs(i).Image = "e" & CStr(i) Next i End With End Sub An dieser Stelle sei angemerkt, dass Sie auf diese Weise auch die Textfarbe für den normalen Zustand individuell festlegen können. Einfach anstelle von vbButtonText den gewünschten Farbwert einsetzen Um nun alle Registerkarten zu disablen, tauschen wir jetzt einfach die jeweiligen Bilder aus und setzen die Enabled-Eigenschaft des TabStrip-Controls auf False: Dim i As Integer ' alle Register disablen/enablen For i = 1 To TabStrip1.Tabs.Count With TabStrip1.Tabs(i) .Image = "d" & CStr(i) End With Next i TabStrip1.Enabled = False Ok... kein Problem. Der Anwender sieht nun auch optisch, dass das Register-Control komplett inaktiv ist. Leider lässt sich das TabStrip-Control immer nur vollständig disablen, verfügt also nicht über die Möglichkeit, einzelne Register zu disablen. Das war bisher. Ab sofort ist auch das kein Problem Um eine einzelne Registerkarte zu disablen blenden wir zunächst auf "graue" Bild um und prüfen im Click-Ereignis, ob der User versucht, die inaktive Registerkarte zu öffnen. Falls dies der Fall ist, wechseln wir einfach zur vorigen Registerkarte. ' 2. Register disablen With TabStrip1.Tabs(2) .Image = "d" & CStr(nTab) End With Private Sub TabStrip1_BeforeClick(Cancel As Integer) ' aktuelles Register merken TabStrip1.Tag = TabStrip1.SelectedItem.Index End Sub Private Sub TabStrip1_Click() ' Falls Reiter disabled... With TabStrip1 If Left$(.SelectedItem.Image, 1) = "d" Then ' ...vorigen Reiter wieder öffnen Set .SelectedItem = .Tabs(Val(.Tag)) End If End With End Sub So... packen wir obigen Code zum Disablen aller bzw. einzelner Registerkarte nun in eine universelle Prozedur, die es erlaubt den Status von Enabled auf Disabled und umgekehrt zu setzen: ' Alle/einzelne Register disablen/enablen Public Sub SetTabStripEnabled(ByVal nTab As Integer, _ ByVal bEnabled As Boolean) Dim i As Integer If nTab = 0 Then ' alle Register disablen/enablen For i = 1 To TabStrip1.Tabs.Count With TabStrip1.Tabs(i) .Image = IIf(bEnabled, "e", "d") & CStr(i) End With Next i TabStrip1.Enabled = bEnabled Else ' einzelne Registerkarte disablen/enablen If TabStrip1.Enabled = True Then With TabStrip1.Tabs(nTab) .Image = IIf(bEnabled, "e", "d") & CStr(nTab) End With End If End If End Sub Der Aufruf erfolgt dann so: ' alle Registerkarten disablen SetTabStripEnabled 0, False ' alle Registerkarten enablen SetTabStripEnabled 0, True ' einzelne Registerkarte disablen SetTabStripEnabled 2, False ' einzelne Registerkarten enablen SetTabStripEnabled 2, True Dieser Tipp wurde bereits 18.175 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 (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! sevCommand 4.0 Professionelle Schaltflächen im modernen Design! Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. 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. |