|
Tipp 0014
|
Listeneinträge verschieben
|
|
|
Autor/Einsender: Datum: |
|
D. Schubert/J. Beil 16.01.2005 (Update) |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Viele Programme bieten ein benutzerabhängiges Layout der Tabellen. Zum Festlegen von Anzahl und Reihenfolge der Spalten
werden meist zwei ListBoxen verwendet. Eine mit dem Spaltenvorrat und die andere mit den Spalten, die später angezeigt
werden sollen.
|
Dazu muss man die Einträge nicht nur zwischen den ListBoxen verschieben, sondern auch die Reihenfolge anpassen können.
Dieser Tipp berücksichtigt auch MultiSelect und die ItemData-Eigenschaft der
ListBoxen.
|
Hinweis
|
Ist die Sorted-Eigenschaft der ListBox auf True gesetzt, werden die entfernten bzw. hinzugefügten
Einträge des Spaltenvorrates automatisch richtig einsortiert.
|
|
|
Option Explicit
Public Const MOVEUP As Byte = 1
Public Const MOVEDOWN As Byte = 2
Public Const MOVETOP As Byte = 3
Public Const MOVEBOTTOM As Byte = 4
'Ab VB 6 kann auch eine Aufzählung verwendet werden:
' Public Enum enumDirection
' MoveUp = 1
' MoveDown = 2
' MoveTop = 3
' MoveBottom = 4
' End Enum
Public Sub ListItemsMove(ByVal lstSource As ListBox, _
ByVal lstDestination As ListBox)
'Einträge zwischen den ListBoxen verschieben
On Error Resume Next
Dim lngCounter As Long
With lstDestination
For lngCounter = (lstSource.ListCount - 1) To 0 Step -1
If lstSource.Selected(lngCounter) = True Then
.AddItem lstSource.List(lngCounter)
.ItemData(.NewIndex) = lstSource.ItemData(lngCounter)
lstSource.RemoveItem (lngCounter)
End If
Next lngCounter
End With
Set lstSource = Nothing
Set lstDestination = Nothing
End Sub
Public Sub ListItemsOrder(ByVal lstListBox As ListBox, _
ByVal varDirection As Byte)
'Ab VB 6 kann auch eine Aufzählung verwendet werden:
' Public Sub ListItemsOrder(ByRef lstListBox As ListBox, _
' ByVal varDirection As enumDirection)
'Einträge in der ListBox nach oben/unten verschieben
On Error Resume Next
Dim lngCounter As Long
Dim blnMove As Boolean
Dim lngDone As Long
With lstListBox
Select Case varDirection
Case MOVEUP
For lngCounter = 0 To (.SelCount - 1)
If .Selected(lngCounter) = False Then
blnMove = True
Exit For
End If
Next lngCounter
If blnMove Then
For lngCounter = 1 To (.ListCount - 1)
If .Selected(lngCounter) Then
.AddItem .List(lngCounter), (lngCounter - 1)
.ItemData(.NewIndex) = .ItemData(lngCounter + 1)
.Selected(.NewIndex) = True
.RemoveItem (lngCounter + 1)
End If
Next lngCounter
End If
Case MOVEDOWN
For lngCounter = (.ListCount - .SelCount) To _
(.ListCount - 1)
If .Selected(lngCounter) = False Then
blnMove = True
Exit For
End If
Next lngCounter
If blnMove Then
For lngCounter = (.ListCount - 2) To 0 Step -1
If .Selected(lngCounter) Then
.AddItem .List(lngCounter), (lngCounter + 2)
.ItemData(.NewIndex) = .ItemData(lngCounter)
.Selected(.NewIndex) = True
.RemoveItem (lngCounter)
End If
Next lngCounter
End If
Case MOVETOP
For lngCounter = 0 To (.ListCount - 1)
If .Selected(lngCounter) Then
.AddItem .List(lngCounter), lngDone
.ItemData(.NewIndex) = .ItemData(lngCounter + 1)
.Selected(.NewIndex) = True
.RemoveItem (lngCounter + 1)
lngDone = lngDone + 1
End If
Next lngCounter
Case MOVEBOTTOM
For lngCounter = (.ListCount - 1) To 0 Step -1
If .Selected(lngCounter) Then
.AddItem .List(lngCounter), (.ListCount - lngDone)
.ItemData(.NewIndex) = .ItemData(lngCounter)
.Selected(.NewIndex) = True
.RemoveItem lngCounter
lngDone = lngDone + 1
End If
Next lngCounter
End Select
.SetFocus
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 (5 kB)
|
Downloads bisher: [ 1665 ]
|
|
|