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
 
Weitere Links zum Thema
Einträge ersetzen
Listeneinträge löschen
Listeneinträge löschen (API)
Listeneinträge per Drag & Drop verschieben

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: [ 1660 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Donnerstag, 25. August 2011