AW: Seltsames Verhalten einer Listbox
02.09.2015 10:34:09
Hendrik
Hallo Gerd,
ja, das habe ich mir schon gedacht. :o)
Allerdings ist das ein riesen Ding, was ich nicht verschicken möchte. Ich versuche dennoch mal die wesentlichen Teile anzuhängen.
Zur Auswahl von verschiedenen Einträgen, kann der Anwender Einträge von der einen Listbox in die andere "schubsen". Dafür hat er die vier Schaltflächen
>
>>
zur Verfügung, kann also alle Einträge oder einzelne bewegen.
Füge ich alle hinzu (>>), wird dieser Code ausgeführt:
Private Sub cmdJoinHinzuAlle_Click()
Dim i As Integer
For i = 0 To lstJoin1.ListCount - 1
lstJoin2.AddItem lstJoin1.List(i, 0)
lstJoin2.List(lstJoin2.ListCount - 1, 1) = lstJoin1.List(i, 1)
lstJoin2.List(lstJoin2.ListCount - 1, 2) = lstJoin1.List(i, 2)
lstJoin2.List(lstJoin2.ListCount - 1, 3) = lstJoin1.List(i, 3)
lstJoin2.List(lstJoin2.ListCount - 1, 4) = lstJoin1.List(i, 4)
lstJoin2.List(lstJoin2.ListCount - 1, 5) = lstJoin1.List(i, 5)
lstJoin2.List(lstJoin2.ListCount - 1, 6) = lstJoin1.List(i, 6)
lstJoin2.List(lstJoin2.ListCount - 1, 7) = ""
lstJoin2.List(lstJoin2.ListCount - 1, 8) = ""
lstJoin2.List(lstJoin2.ListCount - 1, 9) = ""
Next i
lstJoin1.Clear
cmdJoinEntfernen.Enabled = True
cmdJoinEntfernenAlle.Enabled = True
cmdJoinAliasFeld.Enabled = True
cmdJoinAliasTabelle.Enabled = True
Call sortiereBox(lstJoin2, 10, 1, 1, 1)
lstJoin2.ListIndex = 0
cmdJoinHinzu.Enabled = False
cmdJoinHinzuAlle.Enabled = False
lblJoin1.Caption = lstJoin1.ListCount
lblJoin2.Caption = lstJoin2.ListCount
Call sqlGenerieren
End Sub
Entferne ich alle (Private Sub cmdJoinEntfernenAlle_Click()
Dim i As Integer
For i = 0 To lstJoin2.ListCount - 1
lstJoin1.AddItem lstJoin2.List(i, 0)
lstJoin1.List(lstJoin1.ListCount - 1, 1) = lstJoin2.List(lstJoin2.ListIndex, 1)
lstJoin1.List(lstJoin1.ListCount - 1, 2) = lstJoin2.List(lstJoin2.ListIndex, 2)
lstJoin1.List(lstJoin1.ListCount - 1, 3) = lstJoin2.List(lstJoin2.ListIndex, 3)
lstJoin1.List(lstJoin1.ListCount - 1, 4) = lstJoin2.List(lstJoin2.ListIndex, 4)
lstJoin1.List(lstJoin1.ListCount - 1, 5) = lstJoin2.List(lstJoin2.ListIndex, 5)
lstJoin1.List(lstJoin1.ListCount - 1, 6) = lstJoin2.List(lstJoin2.ListIndex, 6)
lstJoin1.List(lstJoin1.ListCount - 1, 7) = ""
lstJoin1.List(lstJoin1.ListCount - 1, 8) = ""
lstJoin1.List(lstJoin1.ListCount - 1, 9) = ""
'Alias wieder freigeben:
If lstJoin2.List(lstJoin2.ListIndex, 7) "" Then aliasFreigeben (lstJoin2.List( _
lstJoin2.ListIndex, 7))
If lstJoin2.List(lstJoin2.ListIndex, 8) "" Then aliasFreigeben (lstJoin2.List( _
lstJoin2.ListIndex, 8))
Next i
lstJoin2.Clear
cmdJoinEntfernen.Enabled = False
cmdJoinEntfernenAlle.Enabled = False
cmdJoinAliasFeld.Enabled = False
cmdJoinAliasTabelle.Enabled = False
Call sortiereBox(lstJoin1, 10, 1, 1, 1)
lstJoin1.ListIndex = 0
cmdJoinHinzu.Enabled = True
cmdJoinHinzuAlle.Enabled = True
lblJoin1.Caption = lstJoin1.ListCount
lblJoin2.Caption = lstJoin2.ListCount
Call sqlGenerieren
End Sub
Wenn ich nun wieder einen einzelnen Eintrag (>) übertrage
Private Sub cmdJoinHinzu_Click()
Dim strJoin As String
Dim i As Integer
If lstJoin1.ListCount > 0 Then
If lstJoin1.ListIndex >= 0 Then
'Zeile in die rechte Box übertragen:
lstJoin2.AddItem lstJoin1.List(lstJoin1.ListIndex, 0)
lstJoin2.List(lstJoin2.ListCount - 1, 1) = lstJoin1.List(lstJoin1.ListIndex, 1)
lstJoin2.List(lstJoin2.ListCount - 1, 2) = lstJoin1.List(lstJoin1.ListIndex, 2)
lstJoin2.List(lstJoin2.ListCount - 1, 3) = lstJoin1.List(lstJoin1.ListIndex, 3)
lstJoin2.List(lstJoin2.ListCount - 1, 4) = lstJoin1.List(lstJoin1.ListIndex, 4)
lstJoin2.List(lstJoin2.ListCount - 1, 5) = lstJoin1.List(lstJoin1.ListIndex, 5)
lstJoin2.List(lstJoin2.ListCount - 1, 6) = lstJoin1.List(lstJoin1.ListIndex, 6)
lstJoin2.List(lstJoin2.ListCount - 1, 7) = ""
lstJoin2.List(lstJoin2.ListCount - 1, 8) = ""
lstJoin2.List(lstJoin2.ListCount - 1, 9) = ""
strJoin = lstJoin1.List(lstJoin1.ListIndex, 0)
'Zeile in der linken Box entfernen:
lstJoin1.RemoveItem (lstJoin1.ListIndex)
Call sortiereBox(lstJoin2, 10, 1, 1, 1)
For i = 0 To lstJoin2.ListCount - 1
If lstJoin2.List(i, 0) = strJoin Then Exit For
Next i
lstJoin2.ListIndex = i
cmdJoinEntfernen.Enabled = True
cmdJoinEntfernenAlle.Enabled = True
cmdJoinAliasFeld.Enabled = True
cmdJoinAliasTabelle.Enabled = True
If lstJoin1.ListCount > 0 Then
cmdJoinHinzu.Enabled = True
cmdJoinHinzuAlle.Enabled = True
Else
cmdJoinHinzu.Enabled = False
cmdJoinHinzuAlle.Enabled = False
End If
End If
lblJoin1.Caption = lstJoin1.ListCount
lblJoin2.Caption = lstJoin2.ListCount
Call sqlGenerieren
End If
End Sub
Bekomme ich mit der Testroutine
lstJoin2.List(lstJoin2.ListIndex, 1)
einen Wert ausgespuckt, den es in lstJoin2 gar nicht mehr gibt!