Synchrones Multiselect zweier Listboxen

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Trerkor.

    Synchrones Multiselect zweier Listboxen

    Guten Nachmittag ;p
    Kurz und knackig..
    Gibt es eine gescheite (und vor allem schnelle (!)) Möglichkeit die Mehrfachauswahl von zwei Listboxen ordentlich zu synchronisieren?
    Und das in beide Richtungen?
    Ich habe schon etliche Anläufe gehabt und so ziemlich jeder hatte irgendeinen Fehler..
    Das ging davon das ich einfach alle Einträge der Liste durchgegangen bin und dann halt jeweils die SelectedIndices verglichen habe (dauert bei bis zu 10k Einträgen sehr lange) oder bei jedem einzelnen Ändern des Indexes irgendwie versucht habe das dann zu synchronisieren..
    Geklappt hat bisher nichts so wirklich. Entweder wurden abgewählte Einträge in der anderen Listbox nicht abgewählt, oder sogar gar nicht erst ausgewählt oder sonst noch ganz dolle Dinger waren dabei *g*
    Momentan bin ich an so einem Teil hier dran:

    VB.NET-Quellcode

    1. Dim point As Point = LstBox1.PointToClient(Cursor.Position)
    2. Dim index As Integer = LstBox1.IndexFromPoint(point)
    3. Dim selected As Boolean = LstBox1.GetSelected(index)
    4. LstBox2.SetSelected(index, selected)

    Das scheitert allerdings daran, das man damit eine schöne Spur in der zweiten ListBox hinterlässt, die zeigt welche Einträge man schon alles ausgewählt hatte ^^

    Also ich hoffe man kann mir helfen.. Grübel da schon seit Tagen drüber und komme absolut nicht weiter..

    MfG
    Trerkor
    @Alex: es geht nicht um Mehrfachauswahl, sondern um Abgleich zweier Boxen bei Mehrfachauswahl

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub ListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedValueChanged
    2. Dim selected As Boolean
    3. For Each element As Integer In ListBox1.SelectedIndices
    4. selected = ListBox1.GetSelected(element)
    5. ListBox2.SetSelected(element, selected)
    6. Next
    7. For Each element As Integer In ListBox2.SelectedIndices
    8. selected = ListBox1.GetSelected(element)
    9. ListBox2.SetSelected(element, selected)
    10. Next
    11. End Sub

    Zuerst werden alle gewählten Items in der anderen Box ausgewählt,
    dann werden alle in der anderen Box ausgewählten Elemente daraufhin untersucht, ob in der ersten Box das entsprechende Element ausgewählt ist.
    Das ist eine Lösung, die Listbox2 mit der ersten Listbox abgleicht. Alternativ könntest du mit der Topindex-Eigenschaft erfahren, welches das erste ausgewählte Element ist. Du musst ja nicht immer alle Items durchlaufen. Es reicht, wenn du nur die sichtbaren Elemente 'bearbeitest'.