Listboxen Vergleichen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Listboxen Vergleichen

    Guten Morgen,

    Entweder liegt es daran das es so Früh ist das ich nicht auf die Lösung komme, oder daran
    das ich es Falsch Versuche :P

    Ich Versuche 2 Listboxen auf ihre Inhalte zu Überprüfen um herauszufinden ob sie den selben Inhalt haben.

    Einträge in der Listbox1 :

    HALLO
    TEST
    TES2

    In der Listbox2 steht nun das Selbe.
    Wie kann ich das nun Überprüfen ob beide denn selben Inhalt haben?

    Habe auch schon ein Code aber der Liefert mir eine "Horde" an Message's Boxen.

    VB.NET-Quellcode

    1. For Each myitems As String In Listbox1.Items
    2. For Each needitems As String In Listbox2.Items
    3. If myitems = needitems Then
    4. MessageBox.Show("Inhalt Stimmt Überein")
    5. Else
    6. MessageBox.Show("Inhalt Stimmt nicht Überein")
    7. End If
    8. Next
    9. Next


    Aber, leider ist dieser auch nicht Wirklich präzise, da er mir dann z.b 3 mal Ausgibt das eine Übereinstimmung eingetroffen ist
    und dann beim 4ten nicht da dieses Item nicht dem Item der 2ten Listbox entspricht.

    Kann mir da einer Helfen?

    LG
    Du vergleichst ja Momentan nicht das erste Item der Listbox 1 mit dem ersten der Listbox 2 und dann das nächste Item sondern du vergleichst Item 1 aus Listbox 1 mit allen Items der Listbox 2....


    //EDIT: Hmm...Vllt. habe ich es auch falsch verstande... Ich ging davon aus du wolltest die lsitboxen vergleichen und die Reihenfolge ist /soll gleich bleiben.
    Verwende 2 Bindinglists welche du an die Listboxen per "DataSource" bindest.
    Hier ein Beispiel inkl. Ausgabe der Differenzen:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Public Class Form1
    3. Private _List1 As New BindingList(Of String)
    4. Private _List2 As New BindingList(Of String)
    5. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    6. _List1.Add("HALLO")
    7. _List1.Add("TEST")
    8. _List1.Add("TEST2")
    9. ListBox1.DataSource = _List1
    10. _List2.Add("HALLO")
    11. _List2.Add("TEST")
    12. _List2.Add("TEST3")
    13. ListBox2.DataSource = _List2
    14. Dim Difference = _List1.Except(_List2).ToList() ' Differenzen
    15. End Sub
    16. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    17. _List1.Add("Neues Item")
    18. End Sub
    19. End Class


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Mein Vorschlag wäre dieser:
    Unter Umständen das gleiche nochmal andersherum. also schauen ob alles was ist L2 vorhanden ist auch in L1 ist. Hängt von den Möglichkeiten des Inhaltes ab.

    VB.NET-Quellcode

    1. Private Sub Vergleich()
    2. Dim IstGleich As Boolean = True
    3. If ListBox1.Items.Count = ListBox2.Items.Count Then ' nur vergleichen, wenn die gleiche Anzahl items enthalten sind
    4. For Each it As Object In ListBox1.Items
    5. If ListBox2.Items.Contains(it) = False Then
    6. IstGleich = False ' ein Ding von der Liste 1 ist nicht in der 2 enthalten, also = ungleich
    7. Exit For ' Spar dir den Rest
    8. End If
    9. Next
    10. Else ' die die Anzahl der beiden Listen unterschiedlich sind, können sie nicht gleich sein
    11. IstGleich = False
    12. End If
    13. If IstGleich Then
    14. MsgBox("jo.. Gleich")
    15. Else
    16. MsgBox("Nö.. isnich")
    17. End If
    18. End Sub
    Danke, RoulettePilot

    Diese Möglichkeit ist Super Geeignet und Funktioniert.
    Habe dein Code noch ein Wenig für mich Umgebaut/Angepasst und Funktioniert Super.
    Ist auch völlig ausreichend!

    LG
    Es ist trotzdem schöner (und wie man sieht auch weniger Code) wenn man die Listboxen an Listen bindet.
    die .Except Ertweiterungsmethode macht genau das, indem die erste mit der zweiten Liste vergleichen wird und die gefundenen Items (welche sich unterscheiden) in eine neue Liste als Rückgabewert der Funktion zurückgegeben wird.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten