Hallo,
habe da ein kleines Problemchen, und zwar habe Ich eine ListView und fülle diese in einer Schleife mit Einträgen.
Funktioniert auch, nur zeigt es mir den letzten Eintrag immer öfters an.
Ich glaube, ich weiß auch woran es liegt. 🤔
Erstmal der Code (in VB.Net):
For Each s As String in xFiles
If Not s Is Nothing Then
lvi = New ListViewItem(s)
lvi.SubItems.Add("Irgendwas")
lvi.SubItems.Add("Irgendwas")
lvi.SubItems.Add("Irgendwas")
lstFiles.Items.Add(lvi)
End If
Next
Jetzt meine Vermutung:
Er fügt mir immer soviele Zeilen ein, wie der Array Elemente hat. Nun gibt es allerdings in dem Array ain paar leere Elemente, die ich eigentlich mit
If Not s Is Nothing
aussortiere. Sie werden laut Debugger auch aussortiert, aber dafür fügt er das letzte nicht leere Array-Element so oft ein, bis Anzahl Zeilen der ListView = Anzahl Elemente im Array.
Wo liegt mein Denkfehler ?(
Ach ja, dieses hier bringt das gleiche Ergebnis:
For Each s As String in xFiles
If Not s Is Nothing Then
lvi = New ListViewItem(s)
lvi.SubItems.Add("Irgendwas")
lvi.SubItems.Add("Irgendwas")
lvi.SubItems.Add("Irgendwas")
If Not lstFiles.Items.Contains(lvi) Then
lstFiles.Items.Add(lvi)
End If
End If
Next
Ich kann also die Elemente auch so nicht aussortieren X(
Vielen Dank schonmal
Gloki
Hallo Gloki!
Also Dein Code ist gut, ich würde die erste Variante nehmen, da in der 2. die zusätzliche Abfrage zu dem Ergebnis führen kann, dass tatsächlich doppelte Einträge (in der Quelle) nicht einträgt. Wenn das so aber gewollt ist, dann solltest Du Variante 2 nehmen.
Aber zu Deinem Problem:
Schau mal ob irgendwo im nachfolgenden Code nochmals irgendwo
lstFiles.Items.Add(x);
auftaucht?
Ciao
Norman-Timo
A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”
Hallo norman,
erstmal Danke für Deine Antwort.
Eigentlich will ich auch die erste Variante nehmen, denn durch Namenskonventionen kann es gar keine doppelten Einträge geben (In der Liste werden Dateinamen angezeigt)
Schau mal ob irgendwo im nachfolgenden Code nochmals irgendwo
Nee, gibt es nicht 🙁
Komisch ist aber, wenn ich im Debugger das Befüllen überwache, erstellt er mir das letzte Element in dieser Schleife x-Mal.
Deswegen habe ich die zweite Variante ausprobiert, aber diese erkennt irgendwie nicht, dass das Element bereits in der Liste auftaucht und fügt es nochmals hinzu.
kann es sein, das er das
If Not lstFiles.Items.Contains(lvi) Then
lstFiles.Items.Add(lvi)
End If
immer ausführt, weil du vorher mit
lvi = New ListViewItem(s)
immer ein neues Objekt erzeugst??
d.h. er kann es dann auch in deiner listview nicht finden....
dann musst du vielleicht auf den string prüfen, ob dieser irgendwo in einem element deiner listview vorkommt.....
Hallo Gloki,
Nun gibt es allerdings in dem Array ain paar leere Elemente, die ich eigentlich mit
was heißt leer? == null oder == ""? null und "" ist ein Unterschied.
herbivore
Guten Morgen!
@ nils: Danke für Deinen Hinweis, damit fällt die 2. Variante komplett weg.
@ herbivore: Sie sind == null, denn sie werden nie gefüllt (habe es aber auch ' mit = "" ' versucht und mit ' == null or == "" ')
Habe das Problem jetzt aber schon anderweitig gelöst. Habe einfach die Anwendung, in der ich den Array befülle so umgeschrieben, dass es keine leeren Elemente mehr gibt. Ist wohl auch die sauberste Lösung.
Obwohl mich auch interessiert hätte, wo das Problem lag 🤔
Vielen Dank nochmal für eure Hilfe
Gruß,
Gloki