|
Von EMail-Programmen her werden Sie das vielleicht kennen: Soll eine Mail an mehrere Empfänger gehen, werden diese hintereinander in das Empfängerfeld eingefügt und durch das in den Benutzereinstellungen des Systems festgelegten Standard-Listentrennzeichen voneinander getrennt. Nun können Sie beispielsweise dem Anwender anbieten, eine solche Empfänger-Liste aus einer ComboBox "zusammenzuklicken".
Im Click-Ereignis der ComboBox (nur bei Style-Eigenschaft "0 - Dropdown-Kombinationsfeld" oder "1 - Einfaches Kombinationsfeld") stellen Sie die Auswahl zusammen:
Private Sub Combo1_Click()
With Combo1
If Len(.Tag) = 0 Then
.Tag = .List(.ListIndex)
Else
.Tag = .Tag & ";" & .List(.ListIndex)
End If
.Text = .Tag
End With
End Sub
Die Zwischenspeicherung in der Tag-Eigenschaft ist notwendig, weil die ComboBox bei einem Klick der Text-Eigenschaft den Text des ausgewählten Elements zuweist. Daher wird hier die eigentliche Aneinanderreihung in der Tag-Eigenschaft abgelegt und nur jedes Mal zur Anzeige im Eingabefeld der Text-Eigenschaft zugewiesen.
Damit die Liste im Eingabefeld auch von Hand erweitert und auch gelöscht werden kann, wird im Change-Ereignis der ComboBox einfach der Inhalt der Text-Eigenschaft an die Tag-Eigenschaft zurücküberwiesen.
Private Sub Combo1_Change()
With Combo1
.Tag = .Text
End With
End Sub
Das funktioniert soweit tadellos. Doch ist wäre es vielleicht ganz praktisch, wenn das ausgewählte und angehängte Element gleich aus der Auswahlliste entfernt würde, damit es nicht versehentlich ein zweites Mal angehängt werden kann.
In diesem Fall muss das durch das Entfernen erneut ausgelöste Click-Ereignis ausgetrickst werden (siehe auch: "Aller guten Dinge ist eins" khwinproc.htm).
Private Sub Combo1_Click()
Dim nListIndex As Long
Dim nList As String
Static sInProc
If sInProc Then
Exit Sub
Else
sInProc = True
End If
With Combo1
nListIndex = .ListIndex
nList = Trim$(.List(.ListIndex))
If Len(nList) Then
If Len(.Tag) = 0 Then
.Tag = .List(.ListIndex)
Else
.Tag = .Tag & ";" & .List(.ListIndex)
End If
If chkRemove.Value Then
.RemoveItem nListIndex
End If
End If
If .ListCount = 0 Then
.AddItem " "
End If
.ListIndex = 0
.Text = .Tag
End With
sInProc = False
End Sub
|