ListviewItem vergleich geht nicht

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

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    ListviewItem vergleich geht nicht

    Hallo. Ich nochmal. Jetzt hänge ich seit Stunden an einem blöden Problem dessen Lösung ich schlichtweg nicht hin bekomme. Ich meine der Code ist korrekt und sollte laufen aber der Listview Inhalt wird einfach nicht verglichen.

    Zum Szenario. Ich habe 2 Listviews. Via Button übergebe ich in LV1 via checked selektierte Items in LV2. Das funktioniert soweit. Jetzt zum Problem. Ich möchte lediglich das beim erneuten klicken des Button abgefragt wird ob es in LV2 den Eintrag schon gibt, wenn ja dann nächstes Element prüfen, wenn nicht dann in LV2 übertragen. Ich habe nun schon alles mögliche probiert. Ich stelle aber jedes mal fest dass die Prüfung einfach übergangen wird.

    VB.NET-Quellcode

    1. If ListView1.CheckedItems.Count > 0 Then
    2. For i As Integer = 0 To ListView1.CheckedItems.Count - 1
    3. lvi = ListView1.CheckedItems(i)
    4. lvi2 = CType(lvi.Clone, ListViewItem)
    5. If ListView2.Items.Count = 0 Then
    6. ListView2.Items.Add(lvi2)
    7. Else
    8. If ListView2.Items.Contains(lvi2) Then '############# HIER FINDET LEIDER KEINE PRÜFUNG STATT. LV2 beinhaltet schon den Text aus LV1. Code tut aber so als wenn dem nicht so wäre.
    9. treffer = True
    10. End If
    11. If treffer = True Then
    12. Else
    13. ListView2.Items.Add(lvi2)
    14. End If
    15. End If
    16. Next
    17. End If


    Wäre schön wenn mir hier jemand auf die Sprünge hilft.


    Ich habe jetzt erstmal diese Lösung fürs Problem gefunden, aber dennoch würde ich gerne wissen warum Variante 1 nicht funktioniert?

    VB.NET-Quellcode

    1. If ListView1.CheckedItems.Count > 0 Then
    2. For i As Integer = 0 To ListView1.CheckedItems.Count - 1
    3. lvi = ListView1.CheckedItems(i)
    4. lvi2 = CType(lvi.Clone, ListViewItem)
    5. If ListView2.Items.Count = 0 Then
    6. ListView2.Items.Add(lvi2)
    7. Else
    8. Dim item1 As ListViewItem = ListView2.FindItemWithText(lvi.Text)
    9. If (item1 IsNot Nothing) Then
    10. treffer = True
    11. Else
    12. End If
    13. If treffer = True Then
    14. Else
    15. ListView2.Items.Add(lvi2)
    16. End If
    17. End If
    18. Next
    19. End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Kaypetri“ ()

    Kaypetri schrieb:

    warum die andere Variante nicht geht

    VB.NET-Quellcode

    1. If ListView2.Items.Contains(lvi2) Then
    Hier werden Instanzen, nicht aber Inhalte der Instanzen verglichen.

    VB.NET-Quellcode

    1. Dim it = New ListViewItem("bla")
    2. ListView1.Items.Add(it)
    3. ListView2.Items.Add(it)
    Hier ist dieselbe Instanz in beiden ListViews.
    =====

    VB.NET-Quellcode

    1. Dim it = New ListViewItem("bla")
    2. ListView1.Items.Add(it)
    3. Dim it2 = New ListViewItem("bla")
    4. ListView2.Items.Add(it2)
    Hier sind zwei unterschiedliche Items mit demselben Inhalt unterwegs.
    =====
    Im 1. Beispiel würde Dein If zuschlagen, im 2. Beispiel nicht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!