vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · Sonstiges   |   VB-Versionen: VB5, VB615.09.03
TabStrip: Register (optisch) disablen

Dieser Tipp zeigt, wie sich einzelne oder alle Registerkarten des TabStrip-Controls disablen lassen - und zwar auch optisch.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  18.175 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

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"?
Und vor allem: Wie kann man einzelne Registerkarten 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

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel