Listview, Einträge-Anzahl erkennen, und für jeden Eintrag dann einen Befehl ausführen

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Bang.

    Listview, Einträge-Anzahl erkennen, und für jeden Eintrag dann einen Befehl ausführen

    Hi. Folgendes: Ich muss es irgentwie schaffen

    1. Die Anzahl der Einträge in einer Listview herauszufinden
    2. Bei jedem den 1. Eintrag in einer Variable speichern und die dann verwenden
    3. Dann den nächsten Eintrag berarbeiten usw.

    Zur besseren verständniss hier:




    Ich möchte jetzt beim starten des Programm's alle Server-Infos aktualisieren. Dafür muss ich das erste Item (also die IP) in einer Variable speichern, den index herausfinden, die verwenden damit ich die Serverinfos aktualisieren kann, und dann den nächsten abarbeiten. Nur das Problem ist, wie geht das genau? Ich hab echt keine Ahnung wie ich das hinkriegen könnte.


    Hätte jemand vll eine Idee?
    Jetzt habe ich ein Problem mit dem berarbeiten der Zeilen. In einem anderen Sub benutze ich ein ClickEvent, und benutze dort

    VB.NET-Quellcode

    1. FavoritenListView.Items(FavoritenListView.SelectedIndices(0)).Text = ConnectIP'bzw FavoritenListView.Items(FavoritenListView.SelectedIndices(0)).SubItems(1).Text = AiW.HostName



    Wie würde das jetzt ohne ein Clickevent sein, sondern wenn ich nur den Index habe? Wenn ich es so mach:

    VB.NET-Quellcode

    1. FavoritenListView.Items(FavoritenListView.Items(Index)).Text = ConnectIP



    kommt der Fehler:

    Spoiler anzeigen
    Fehler 5 Fehler bei der Überladungsauflösung, da keine zugreifbare "Item" mit diesen Argumenten aufgerufen werden kann:
    "Public Overridable ReadOnly Default Property Item(key As String) As System.Windows.Forms.ListViewItem": Der Wert vom Typ "System.Windows.Forms.ListViewItem" kann nicht in "String" konvertiert werden.
    "Public Overridable Default Property Item(index As Integer) As System.Windows.Forms.ListViewItem": Der Wert vom Typ "System.Windows.Forms.ListViewItem" kann nicht in "Integer" konvertiert werden. J:\Users\xxx\documents\visual studio 2010\Projects\aIW Connecter\aIW Connecter\HauptForm.vb 276 20 aIW Connecter



    jemand eine Idee?
    Okay ich bin jetzt soweit dass sobald ich den Button drücke die erste Zeile aktualisiert wird, aber bei der 2. Zeile gibt es wieder den Error von Oben. Ich glaube die 2. Zeile wird nicht selektiert. Mein Jetziger Code:

    VB.NET-Quellcode

    1. Dim Index As Integer = 0
    2. For Each FavoritenIP As ListViewItem In FavoritenListView.Items
    3. Dim IPSplit() As String = FavoritenIP.Text.Split(":")
    4. Dim AiW As New Status(IPSplit(0), Convert.ToInt32(IPSplit(1)))
    5. If AiW.Online = True Then
    6. FavoritenListView.Items.Item(Index).Selected = True
    7. FavoritenListView.SelectedItems.Item(Index).Text = FavoritenIP.Text
    8. FavoritenListView.SelectedItems(Index).SubItems(1).Text = AiW.HostName
    9. FavoritenListView.SelectedItems(Index).SubItems(2).Text = AiW.MapName
    10. FavoritenListView.Refresh()
    11. Index = Index + 1
    12. End If
    13. Next FavoritenIP


    Um sicherzugehen, Item = eine Zeile oder?
    Okay, noch mal von vorne :P

    Guck dir mal dieses Bild an:



    Wie du siehst gibt es 3 Listboxen, im Moment geht es nur um die obere. Ich möchte jetzt also mit einem Button die Texte des Items und Subitems ändern. Ich hab es bis jetzt nur hinbekommen die Texte der 1. Zeile zu ändern, sobald der mit der 2. Zeile anfangen soll kommt folgender error:

    InvalidArgument=Value mit dem Wert 1 ist für index ungültig.
    Parametername: index
    Mein jetztiger Code ist folgender:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click MsgBox(FavoritenListView.Items.Count.ToString())
    2. Dim Index As Integer = 0 For Each FavoritenIP As ListViewItem In FavoritenListView.Items Dim IPSplit() As String = FavoritenIP.Text.Split(":") Dim AiW As New Status(IPSplit(0), Convert.ToInt32(IPSplit(1))) If AiW.Online = True Then FavoritenListView.Items.Item(Index).Selected = True FavoritenListView.SelectedItems.Item(Index).Text = FavoritenIP.Text FavoritenListView.SelectedItems(Index).SubItems(1).Text = AiW.HostName FavoritenListView.SelectedItems(Index).SubItems(2).Text = AiW.MapName FavoritenListView.Refresh() Index = Index + 1 End If Next FavoritenIP End Sub
    ´


    Verstehst du jetzt mein Problem? :P

    Edit: Die Formatierung bugt anscheinend, hier nochmal in einem Zitat:

    Spoiler anzeigen
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    MsgBox(FavoritenListView.Items.Count.ToString())

    Dim Index As Integer = 0
    For Each FavoritenIP As ListViewItem In FavoritenListView.Items
    Dim IPSplit() As String = FavoritenIP.Text.Split(":")
    Dim AiW As New Status(IPSplit(0), Convert.ToInt32(IPSplit(1)))
    If AiW.Online = True Then
    FavoritenListView.Items.Item(Index).Selected = True
    FavoritenListView.SelectedItems.Item(Index).Text = FavoritenIP.Text
    FavoritenListView.SelectedItems(Index).SubItems(1).Text = AiW.HostName
    FavoritenListView.SelectedItems(Index).SubItems(2).Text = AiW.MapName
    FavoritenListView.Refresh()
    Index = Index + 1
    End If
    Next FavoritenIP
    End Sub
    So kannst du eine bestimmte Zeile ändern:

    VB.NET-Quellcode

    1. With LV.Items(Index)
    2. .SubItems(0).Text = "neuer"
    3. .SubItems(1).Text = "text"
    4. .SubItems(2).Text = "!!!"
    5. End With


    wobei du den index noch festlegen musst.

    wenn du alle ändern willst:

    VB.NET-Quellcode

    1. For i As Integer = 0 To LV.Items.Count - 1
    2. With LV.Items(i)
    3. .SubItems(0).Text = "neuer"
    4. .SubItems(1).Text = "text"
    5. .SubItems(2).Text = "!!!"
    6. End With
    7. Next


    PS: LV ist meine listview
    Für ein Mindestmaß an Rechtschreibung, Interpunktion und Majuskeln!
    deine Fehler kann ich dir erklären:

    du nimmst ja die Variable Index immer +1, das heißt sie ist im zweiten durchgang 1 groß, und im Code willst du dann auf das 2. der selectierten Items zugreifen. Wenn du aber nur 1 selectiert hast kommt der Fehler, dein Code kann nur funktionieren, wenn alle Items selectiert sind.

    machs so:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    2. MsgBox(FavoritenListView.Items.Count.ToString())
    3. For Each itm As ListViewItem In FavoritenListView.Items
    4. Dim IPSplit() As String = FavoritenIP.Text.Split(":")
    5. Dim AiW As New Status(IPSplit(0), Convert.ToInt32(IPSplit(1)))
    6. If AiW.Online = True Then
    7. itm.Text = FavoritenIP.Text
    8. itm.SubItems(1).Text = AiW.HostName
    9. itm.SubItems(2).Text = AiW.MapName
    10. End If
    11. Next
    12. End Sub


    So müssts klappen

    Gruß Einsteiger