ListView, For Schleife, <-Die vertragen sich nicht :C

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von editor.

    ListView, For Schleife, <-Die vertragen sich nicht :C

    Nabend liebes VB-Paradise Team, :}

    gleich zur Sache:


    Ich benutze ein ListView-control in dem bestimmte Prozesse eingetragen werden.
    Dann wird überprüft ob der Prozess noch läuft, wenn nicht wird der Eintrag gelöscht. (Soll kein Taskmanager werden ;])
    Das funktioniert auch alles, nur wird dann wenn alles ausgeführt wurde ein Fehler angezeigt.

    Code:

    VB.NET-Quellcode

    1. Private Sub Timer_Global_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer_Global.Tick
    2. ' Me.TopMost = True
    3. Button_Exit.Text = dir
    4. If dir <> "" Then
    5. If Process.GetProcessesByName(dir).Length = 0 Then
    6. Dim remover As New List(Of Integer)
    7. For i = 0 To ListView_Main.Items.Count - 1
    8. If ListView_Main.Items(i).Text.Contains(dir) Then remover.Add(i)
    9. Next
    10. For i = remover.Count - 1 To 0
    11. ListView_Main.Items.RemoveAt(remover(i))
    12. Next
    13. remover = Nothing
    14. End If
    15. End If
    16. End Sub


    Die Variable "dir" beinhaltet hier den Wert "OH MEIN GOTT!!" (War auch nur ein kleines Testprogramm ;])

    Nach dem "erfolgreichen" entfernen des Eintrags hebt er folgenden Code hervor:

    VB.NET-Quellcode

    1. ListView_Main.Items.RemoveAt(remover(i))


    Fehler:

    Der Index lag außerhalb des Bereichs. Er muss nicht negativ und kleiner als die Auflistung sein. Parametername: index
    Kann mir bitte jemand helfen den Fehler zu beseitigen?

    Danke :)




    Code mommentan:

    VB.NET-Quellcode

    1. If ListView_Main.Items.Count > 0 Then
    2. Else
    3. For Each item As ListViewItem In ListView_Main.Items
    4. If System.Diagnostics.Process.GetProcessesByName(item.Text).Length >= 1 Then
    5. Else
    6. For i = 0 To ListView_Main.Items.Count - 1
    7. If ListView_Main.Items(i).Text.Contains(item.Text) Then ListView_Main.Items.RemoveAt(i)
    8. Next
    9. End If
    10. Next
    11. End If

    Funktioniert kein stück :C


    mfg editor

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

    Ach jeh, das ist so kopliziert :P

    Also ich habe das ganze Konzept mal umgekrämpelt.
    Jetzt versuche ich bestimmte Prozesse in eine Listview Komponente einzutragen, und dann über einen Timer immer überprüfen zu lassen ob die Prozesse noch am laufen sind die in der Lw Komponente angezeigt werden. Wenn nicht wird dieses Item anhand des Namens gelöscht.

    Quasi:

    for i = 1 to (ListView1.Items.Count "das alle listview items mal durch sind")
    if prozess.getprozessbyname(name von listviewitem aus nummer ausgelesen) exist
    then
    else
    end if
    next

    Eine Frage vorweg -> Wie finde ich heraus ob in der ListView Komponente keine Items sind?
    [EDIT]

    Mommentaner Code:

    VB.NET-Quellcode

    1. If ListView_Main.Items.Count > 0 Then
    2. Else
    3. For Each item As ListViewItem In ListView_Main.Items
    4. If System.Diagnostics.Process.GetProcessesByName(item.Text).Length >= 1 Then
    5. Else
    6. For i = 0 To ListView_Main.Items.Count - 1
    7. If ListView_Main.Items(i).Text.Contains(item.Text) Then ListView_Main.Items.RemoveAt(i)
    8. Next
    9. End If
    10. Next
    11. End If


    Funktioniert aber nicht :C

    Ich verstehe nicht, warum das nicht funktionieren sollte cO

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „editor“ ()

    Man sollte wirklich, wenn man einen Beitrag editiert, einstellen können, dass das Thema sich erledigt hat, dann hätte ich jetzt keinen neuen Post machen müssen :C

    Tadaaa:

    VB.NET-Quellcode

    1. If ListView_Main.Items.Count > 0 Then
    2. For Each item As ListViewItem In ListView_Main.Items
    3. If System.Diagnostics.Process.GetProcessesByName(item.Text).Length >= 1 Then
    4. Else
    5. item.Remove()
    6. End If
    7. Next
    8. End If