Listview Subitem problem

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Listview Subitem problem

    Hei,

    ich bleib mal wieder an der Listview hängen :x
    Undzwar will ich den Text eines Subitems durch "*" ersetzen. Aber die "*" sollen genauso viele Zeichen haben, wie das Subitem es hatte.
    Das klappt auch bisher wunderbar:

    VB.NET-Quellcode

    1. Dim test As String
    2. For i As Integer = 1 To ListView1.Items(0).SubItems(2).Text.Length
    3. test &= "*"
    4. ListView1.Items(0).SubItems(2).Text = test
    5. Next


    Jetzt möchte ich das aber bei jedem Subitem machen.
    Weiß aber nicht wie ich das realisieren muss :/
    Hoffe, dass ihr mir da ein bisschen helfen könnt. :)

    Lg
    Hi
    das kannst du auch so machen:

    VB.NET-Quellcode

    1. For Each itm As ListViewItem in ListView1.Items
    2. itm.SubItems(2).Text = New String("*"c, itm.Text.Length)
    3. Next

    Bei dem New String("*", itm.Text.Length) bin ich nicht ganz sicher, ob es die richtige Reihenfolge der Parameter ist. Es müsste aber so passen.

    Gruß
    ~blaze~
    Mh, das kenne ich garnicht. Habe grad mal gegooglet und so wie ich das jetzt verstanden habe, kann man so eine String-Liste erstellen und "Einträge" hinzufügen. Aber wie gebe ich die nun wieder in der richtigen Reihenfolge aus?
    Vielleicht könntest du ein kleines Beispiel erstellen. :)
    soweit ich weiß kannst du auf die Einträge mit NamedeinerListe(index)
    zugreifen,
    wenn du es richtig machst sind die Indices in der Liste die zugehörigen zu denen in der ListView


    erstellen tust du sie so:

    Dim NamedeinerListe As List(ofString)


    Gruß Vitox
    Naja, ich habe es jetzt hingekriegt das Item und das zugehörige Subitem zu speichern:
    EDIT: Es sind anfangs 2 Items in der Listview!

    VB.NET-Quellcode

    1. Dim TestListe As List(Of ListViewItem) = New List(Of ListViewItem)
    2. Dim TestListe2 As List(Of ListViewItem.ListViewSubItem) = New List(Of ListViewItem.ListViewSubItem)
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. TestListe.Add(ListView1.Items(1))
    5. TestListe2.Add(ListView1.Items(1).SubItems(1))
    6. ListView1.Items.Clear()
    7. End Sub
    8. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    9. With ListView1.Items.Add(TestListe.Item(0).Text)
    10. .SubItems.Add(TestListe2.Item(0).Text)
    11. End With
    12. End Sub


    Jetzt muss ich das ganze aber noch in eine Schleife bringen. Da ich aber eigentlich noch nie wirklich damit gearbeitet habe, bräuchte ich mal eure Hilfe. :s
    Ps: Ich weiß, dass ich das mit den Schleifen können muss X( Aber ich blick nicht dadurch. :x

    Lg

    VB.NET-Quellcode

    1. Dim TestListe As List(Of ListViewItem) = New List(Of ListViewItem)
    2. Dim TestListe2 As List(Of ListViewItem.ListViewSubItem) = New List(Of ListViewItem.ListViewSubItem)
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. For Each itm As ListViewItem In ListView1.Items
    5. TestListe.Add(itm)
    6. TestListe2.Add(itm.SubItems(1))
    7. Next
    8. ListView1.Items.Clear()
    9. End Sub
    10. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    11. For Each itm As LisViewItem In TextListe
    12. For Each subitm As ListViewItem.ListViewSubItem In TextListe2
    13. With ListView1.Items.Add(itm)
    14. .SubItems.Add(subitm)
    15. End With
    16. Next
    17. Next
    18. End Sub


    Is frei hand gemacht, aber ich hoff es geht

    Gruß Vitox
    Kay, es funktioniert so:


    VB.NET-Quellcode

    1. Dim TestListe As List(Of ListViewItem) = New List(Of ListViewItem)
    2. Dim TestListe2 As List(Of ListViewItem.ListViewSubItem) = New List(Of ListViewItem.ListViewSubItem)
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. For Each itm As ListViewItem In ListView1.Items
    5. TestListe.Add(itm)
    6. TestListe2.Add(itm.SubItems(1))
    7. Next
    8. ListView1.Items.Clear()
    9. End Sub
    10. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    11. For Each itm As ListViewItem In TestListe
    12. With ListView1.Items.Add(itm)
    13. End With
    14. Next
    15. End Sub


    Komisch o.ô
    Aber danke dir :thumbsup:
    Jo, hast recht. ^^

    Danke kriegst du noch, 1 Fehler taucht noch auf D:

    VB.NET-Quellcode

    1. If CheckBox1.Checked = True Then
    2. For Each itm As ListViewItem In ListView1.Items
    3. TestListe.Add(itm)
    4. 'TestListe2.Add(itm.SubItems(1))
    5. Next
    6. For Each itm As ListViewItem In ListView1.Items
    7. itm.SubItems(1).Text = New String("*", itm.Text.Length)
    8. Next
    9. Else
    10. For Each itm As ListViewItem In TestListe
    11. With ListView1.Items.Add(itm) ' HIER KOMMT DER FEHLER
    12. End With
    13. Next
    14. End If


    Bei dem markiertem bekomme ich einen Fehler:
    Das Element awd kann nur an einer Stelle hinzugefügt oder eingefügt werden. Entfernen Sie es von der aktuellen Position, oder klonen Sie es. Parametername: item

    Damit kann ich nun leider garnichts anfangen :pinch:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „SeySey“ ()

    Bringt nichts. Es liegt wahrscheinlich daran:

    VB.NET-Quellcode

    1. For Each itm As ListViewItem In ListView1.Items
    2. itm.SubItems(1).Text = New String("*"c, itm.Text.Length)
    3. Next


    Wenn ich dann:

    VB.NET-Quellcode

    1. For Each itm2 As ListViewItem In TestListe
    2. ListView1.Items.Add(itm2)
    3. Next


    gibts nen Fehler, weil die Listview doch erst leer sein muss. Außerdem überschreibt der erste Code die String-Liste.
    2 Probleme also noch.

    Projekt im Anhang.
    Dateien
    ich schaus mir mal an!

    so: hier der geänderte Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim x As New List(Of String)
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    4. x.Clear()
    5. For Each itm3 As ListViewItem In ListView1.Items
    6. x.Add(itm3.SubItems(1).Text)
    7. Next
    8. End Sub
    9. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    10. Dim i As Integer = 0
    11. For Each itm2 As String In x
    12. ListView1.Items(i).SubItems(1).Text = itm2
    13. i += 1
    14. Next
    15. End Sub
    16. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    17. For Each itm As ListViewItem In ListView1.Items
    18. itm.SubItems(1).Text = New String("*"c, itm.Text.Length)
    19. Next
    20. End Sub
    21. Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
    22. ListView1.Items.Clear()
    23. x.Clear()
    24. End Sub
    25. End Class


    Gruß Vitox

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Vitox“ ()