![]() |
Tipp 0337
|
Farbige ListBox (TreeView-Steuerelement)
|
 |
|
Autor/Einsender: Datum: |
|
Angie 07.06.2003 |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Immer wieder wird die Frage gestellt, wie man die Hintergrundfarbe einzelner Elemente in einer
ListBox farblich abgesetzt darstellen kann.
Mit der ListBox selbst ist das nicht möglich, aber mit dem TreeView-Steuerelement lässt sich das durchaus realisieren (ab VB 6 ohne API-Funktionen).
|
Mit dem TreeView-Steuerelement kann man unter anderem jedem einzelnen Element eine individuelle Hintergrund- sowie Schriftfarbe und -Art
(z.B. fett oder normal) zuweisen. Auch kann jedem Element ein Symbol zugewiesen werden, plus ein zweites Symbol, das beim Auswählen eines
Node-Objekts angezeigt wird.
|
Weitere Eigenschaften, die bei der ListBox nicht standardmäßig vorhanden aber durchaus mit API-Funktionen machbar sind, wie z.B. die horizontale
ScrollBar oder aber auch das Anzeigen eines "überlangen" Textes als ToolTipp, sind Standard-Eigenschaften des TreeView-Steuerelements.
|
Dieser Tipp zeigt, wie man schon mit einigen der vielen Eigenschaften und Methoden des TreeView-Steuerelements eine farbige Listbox inkl.
Abbildungen verwirklichen kann.
|
|
|
Option Explicit
Private Sub Form_Load()
Dim i As Integer
With cboTVWDesign
.Clear
.AddItem "Buch"
.AddItem "Smily's"
.AddItem "Standard"
End With
With tvwListBox
.FullRowSelect = True
.HideSelection = False
.LabelEdit = tvwManual
Set .ImageList = imglstTVW
For i = 1 To 20
.Nodes.Add Text:="Liste " & i
Next i
.Nodes.Item(1).Selected = True
End With
DoEvents
optNodeAdd(0).Tag = "0"
optNodeAdd(1).Tag = "1"
optNodeAdd(2).Tag = "2"
optNodeAdd(1).Value = True
cboTVWDesign.ListIndex = 0
End Sub
Private Sub cboTVWDesign_Click()
If tvwListBox.Nodes.Count = 0 Then Exit Sub
Dim lngBackColor1 As Long
Dim lngBackColor2 As Long
Dim lngForeColor1 As Long
Dim lngForeColor2 As Long
Dim strImage As String
Dim strImageSel As String
Dim nodSibling As Node
Dim intCnt As Integer
Select Case cboTVWDesign.ListIndex
Case 0
lngBackColor1 = &HC0C0FF
lngBackColor2 = &HFFFFFF
lngForeColor1 = &HFF0000
lngForeColor2 = &HC0&
strImage = "imgBook1"
strImageSel = "imgBook2"
Case 1
lngBackColor1 = &HFFFFC0
lngBackColor2 = &HFFFFFF
lngForeColor1 = &HFF0000
lngForeColor2 = &HC0&
strImage = "imgSmily1"
strImageSel = "imgSmily2"
Case 2
lngBackColor1 = vbWindowBackground
lngForeColor1 = vbWindowText
End Select
Set nodSibling = tvwListBox.Nodes(1).Root
If cboTVWDesign.ListIndex = 2 Then
tvwListBox.Style = tvwTextOnly
Do
nodSibling.BackColor = lngBackColor1
nodSibling.ForeColor = lngForeColor1
Set nodSibling = nodSibling.Next
Loop While Not nodSibling Is Nothing
Else
tvwListBox.Style = tvwPictureText
intCnt = 0
Do
intCnt = intCnt + 1
If intCnt Mod 2 <> 0 Then
nodSibling.BackColor = lngBackColor1
nodSibling.ForeColor = lngForeColor1
Else
nodSibling.BackColor = lngBackColor2
nodSibling.ForeColor = lngForeColor2
End If
nodSibling.Image = strImage
nodSibling.SelectedImage = strImageSel
Set nodSibling = nodSibling.Next
Loop While Not nodSibling Is Nothing
End If
Set nodSibling = Nothing
End Sub
Private Sub cmdAddItem_Click()
Dim nodX As Node
Dim nodRelative As Node
Dim intRelation As Integer
Dim strNodeText As String
Dim i As Integer
Static stboolNodes As Boolean
If Len(Trim$(txtNodeText.Text)) = 0 Then
strNodeText = "x-beliebiger neuer Eintrag"
Else
strNodeText = txtNodeText.Text
End If
With tvwListBox
If .Nodes.Count > 0 Then
For i = 0 To 2
If optNodeAdd(i).Value = True Then
intRelation = CInt(optNodeAdd(i).Tag)
Exit For
End If
Next i
Select Case intRelation
Case 0, 1
Set nodRelative = .Nodes(1).Root
Case 2
If Not tvwListBox.SelectedItem Is Nothing Then
Set nodRelative = .Nodes(.SelectedItem.Index)
Else
MsgBox "Bitte wählen Sie einen Eintrag aus!", _
vbInformation, Me.Caption
End If
End Select
If Not nodRelative Is Nothing Then
Set nodX = .Nodes.Add(Relative:=nodRelative, _
Relationship:=intRelation, Text:=strNodeText)
End If
Else
stboolNodes = True
Set nodX = .Nodes.Add(Text:=strNodeText)
End If
End With
If Not nodX Is Nothing Then
nodX.Selected = True
nodX.EnsureVisible
End If
Set nodRelative = Nothing
Set nodX = Nothing
If stboolNodes Then
stboolNodes = False
cmdDeleteItem.Enabled = True
cmdSelectedItem.Enabled = True
For i = 0 To 2
optNodeAdd(i).Enabled = True
Next i
End If
If cboTVWDesign.ListIndex <> 2 Then
cboTVWDesign_Click
End If
End Sub
Private Sub cmdDeleteItem_Click()
With tvwListBox
If Not .SelectedItem Is Nothing Then
.Nodes.Remove .SelectedItem.Index
Else
MsgBox "Sie müssen erst einen Eintrag auswählen!", _
vbInformation, Me.Caption
End If
If .Nodes.Count = 0 Then
cmdDeleteItem.Enabled = False
cmdSelectedItem.Enabled = False
Dim i As Integer
For i = 0 To 2
optNodeAdd(i).Enabled = False
Next i
Else
If cboTVWDesign.ListIndex <> 2 Then
cboTVWDesign_Click
End If
End If
End With
End Sub
|
|
|
|
|
Windows-Version |
95 |
 |
|
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
VB-Version |
VBA 5 |
 |
|
VBA 6 |
 |
|
VB 4/16 |
 |
|
VB 4/32 |
 |
|
VB 5 |
 |
|
VB 6 |
 |
|
|
|
Download (7,5 kB)
|
Downloads bisher: [ 3081 ]
|
|
|