VB-Homepage Tipp 224

Übernehmen / Übergeben von Werten zwischen Listboxen

Wie Sie mittels Dragn & Drop Einträge zwischen Listboxen verschieben können, daß konnten Sie schon in einem vorherigen Tipp nachlesen.

Aber vielleicht möchten Sie dies doch eher auf konventionelle Art lösen, über Button oder Doppelklick auf den Eintrag.
Wenn dem so ist (und warum sonst, hätten Sie diesen Tipp gewählt), dann brauchen Sie nun nicht mehr warten, hier ist der Tipp.

1. Als erstes benötigen Sie, wie immer, ein neues Projekt.
Sie können dabei die Version Ihrer Wahl nehmen (VB3 / VB4 / VB5 / VB6),
da keinerlei API-Funktionen verwendet werden.

Diesem Projekt spendieren sie folgende Objekte.
* Listbox = List1
* Listbox = List2
* Commandbutton = Command1 / Index = 0 / Caption = >
* Commandbutton = Command1 / Index = 1 / Caption = >>
* Commandbutton = Command1 / Index = 2 / Caption = <
* Commandbutton = Command1 / Index = 3 / Caption = <<
Ordnen Sie die Objekte dabei so an, das die Button, der Reihenfolge nach wie angegeben, von oben nach unten zwischen den Listboxen angeordnet sind.

2. Als nächstes gilt es eine eigene Prozedur zu definieren, diese nennt sich FourButton, also für unsere vier Buttons gedacht.
Deshalb ist die Identifizierung an Hand des Indexes (0-3) auch notwendig.

Fügen Sie den Code einfach unter
Allgemein/Deklarationen
ein, dann wird die Prozedur automatisch erzeugt.

Private Sub FourButtons(ByVal Index As Integer)
Screen.MousePointer = 11 'Mauszeiger (bin beschäfftigt !)

Select Case Index 'Identifizierung des gedrückten Buttons
   Case 0
      If List1.ListCount = 0 Then
         Screen.MousePointer = 0
         Exit Sub
      End If

      If List1.ListIndex = -1 Then
         List1.SetFocus
         List1.Selected(0) = True
      End If

      DoEvents 'damit die anderen auch mal zum Züge kommen
      List2.AddItem List1.Text
      List1.RemoveItem List1.ListIndex

   Case 1
      If List1.ListCount = 0 Then
         Screen.MousePointer = 0
         Exit Sub
      End If

      If List1.ListIndex = -1 Then
         List1.SetFocus
         List1.Selected(0) = True
      End If

      DoEvents
      For i = (List1.ListCount - 1) To 0 Step -1
         List2.AddItem List1.List(i)
         DoEvents
      Next i

      List1.Clear

   Case 2
      If List2.ListCount = 0 Then
         Screen.MousePointer = 0
         Exit Sub
      End If

      If List2.ListCount = 0 Then Exit Sub

      If List2.ListIndex = -1 Then
         List2.SetFocus
         List2.Selected(0) = True
      End If

      List1.AddItem List2.Text
      List2.RemoveItem List2.ListIndex

   Case 3

      If List2.ListCount = 0 Then
         Screen.MousePointer = 0
         Exit Sub
      End If

      If List2.ListCount = 0 Then Exit Sub

      If List2.ListIndex = -1 Then 'nothing is selected.
         List2.SetFocus 'set focus.
         List2.Selected(0) = True 'select first item in list.
      End If

      For i = (List2.ListCount - 1) To 0 Step -1
         List1.AddItem List2.List(i)
         DoEvents
      Next i

      List2.Clear
End Select

Screen.MousePointer = 0 'Mauszeiger (alles wieder bereit)

End Sub

3. Das war schon der Hauptteil unseres Tipps.

Ein wenig müssen wir aber noch, denn wir benötigen ja noch ein paar Einträge die verschoben werden sollen.

Definieren Sie dazu in der
FORM_LOAD Aktion folgendes

List1.AddItem "Apfel"
List1.AddItem "Birne"
List1.AddItem "Banane"
List1.AddItem "Mandarine"
List1.AddItem "Melone"
List1.AddItem "Pfirsich"
List1.AddItem "Pflaume"
List1.AddItem "Kirsche"

4. Und nun geben wir den Commandbuttons noch Bescheid, was sie bei einem Klick tun sollen. Da wir ja mit dem selben Button, nur durch Index klassifiziert, arbeiten, muß der Eintrag nur in einem Button definiert werden.

Command1_Click(Index As Integer)
Call FourButtons(Index)

5. Um die Funktionalität eines direkten Verschiebens eines Eintrags mittels Doppelklick zu realisieren benötigt Listbox1 unter
LIST1_DBLCLICK diesen Eintrag ....

List2.AddItem List1.Text
List1.RemoveItem List1.ListIndex

... und Listbox2 unter
LIST2_DBLCLICK jenen Eintrag.

List1.AddItem List2.Text
List2.RemoveItem List2.ListIndex

6. Speichern Sie Ihr Projekt ab und starten Sie über F5 einen Probelauf.
Dabei läßt sich sowohl ein aber auch alle Einträge zwischen den Listboxen
hin und her schieben.


Tipp-Download

Quelle :

Zurück zur Übersichtsseite