ListView.Items entfernen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von Easly.

    ListView.Items entfernen

    Hallo,

    ich lasse mit einer ListView etwas nummerieren und möchte, dass die ListView nach jedem neuen Item den Wert, der als Item dargestellt wird, -100 gerechnet wird und der Eintrag in der ListView mit dem Item "X-100" soll entfernt werden, sodass quasi NIE mehr als 100 Items aufgelistet sind.

    Ich kriege das irgendwie nicht hin. Könnt ihr mir helfen?
    Mal sehen, ob ich das richtig verstanden habe.

    Quellcode

    1. WENN ListView1.Items.Anzahl größer 100 DANN
    2. ListView1.Items.NehmeWeg(alle von vorn bis Anzahl = 100)
    3. END
    So etwa?
    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!
    Hm... Na ja.

    Also ich habe mir das so vorgestellt gehabt (was aber nicht funktioniert hatte)

    Dim X As Integer = 0

    In einem Timer passiert folgendes{

    x = x + 1
    listview1.items.add(x).subitems.add(z)

    try

    dim w as integer = x - 100
    listview1.items.remove(w)

    catch
    end try

    }

    Easly schrieb:

    In einem Timer passiert folgendes
    Hä?
    Was hat das mit einem Timer zu tun?
    Du hast meinen Part mit dem 100-Test noch nicht verstanden.
    Denk noch mal ganz scharf nach.
    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!
    Na ja ich habe das bei Dir jetzt so verstanden, dass diese Aktion nur durchgeführt wird, wenn mehr als 100 Items in der Listview sind und der Wert dann wieder auf 100 springt, was ich aber nicht möchte.

    Ich weiß nicht ob Du das kennst mit dem lieben Mathematikern Collatz? Ich möchte auf jeden Fall X = Zahl von 1 bis ins Unendliche, und davon wird dann der Wert der Durchgänge (Z) ermittelt, wie oft die Rechnung durch eine While-Schleife gejagt wird. Und der Wert soll dann aufgelistet werden, des halb der Timer.

    Und der Eintrag X (beispiel) 1 soll entfernt werden (oder auch "raus genommen") wenn die aktuelle Zahl von X 101 ist! Und das auch so bei 102, 105, 47205, ...

    Es sollen immer genau 100 Einträge vorhanden sein! (Außer am Anfang, da müssen die Werte bis 100 ja erst eingetragen werden).
    ich würde einfach, wenn es 100 elemente sind, das erste löschen und dann das nächste hinzufügen

    VB.NET-Quellcode

    1. y = x - 100
    2. If ListView1.Items.Count > 100 Then
    3. ListView1.Items.Remove(ListView1.Items.Item(y.ToString()))
    4. End If
    5. ListView1.Items.Add(x.ToString())

    btw. es heißt While-Abfrage und nicht "While-Schleife"

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

    VB.NET-Quellcode

    1. Dim x As Integer = 1
    2. Dim z As Integer = 0
    3. Dim sx As Integer
    4. Dim sz As Integer
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. Dim y As Integer
    7. y = x
    8. While Not y = 1
    9. If y Mod 2 = 0 Then
    10. y = y / 2
    11. Else
    12. y = y * 3 + 1
    13. End If
    14. z += 1
    15. End While
    16. If z > sz Then
    17. sz = z
    18. sx = x
    19. End If
    20. Dim w As Integer = x - 100
    21. If ListView1.Items.Count > 100 Then
    22. ListView1.Items.Remove(ListView1.Items.Item(w.ToString()))
    23. End If
    24. ListView1.Items.Add(x).SubItems.Add(z)
    25. Label2.Text = "X = " & sx & " | Z = " & sz
    26. Label3.Text = x
    27. x = x + 1
    28. z = 0
    29. End Sub
    Nicht Remove, sondern ListView1.Items.RemoveAt(INDEX).
    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!
    ... Aaaaalso:

    X = irgendein Wert.

    Solange X NICHT =1 ist, soll folgendes getan werden{

    WENN X GERADE ist, dann dividiere X durch 2!
    Wenn X NICHTGERADE ist, dann multipliziere X mit 3 und addiere 1 hinzu!
    Nach jedem Durchlauf wird Z +1 gerechnet.

    }

    Beispiel:
    X = 5

    5 (ungerade) * 3 + 1 = 16
    z = 1

    16 (gerade) / 2 = 8
    z = 2

    8 (gerade) / 2 = 4
    z = 3

    4 (gerade) / 2 = 2
    z = 4

    2 (gerade) / 2 = 1
    z = 5
    Abfrage verlassen.


    Mein Gott ich werde nie eine Lösung finden. :T


    Ich habe es hingekriegt, danke für Eure Hilfe! =)

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

    Ich glaube, Du versuchst, gleichzeitig 11 Baustellen Deines Programms zu bedienen und dazu 4 Fragen in einem Thread zu klären.
    Also: Eine Baustelle, ein Thread.
    Mach Dir ein separates Testprogramm und füge ihm einen ListView mit sinnvollen Daten ("Bla", Blabla") hinzu und einen Button, mit dem Du die 1. Zeile dieses LV löschst, und zwar solange, bis keine mehr da ist.
    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!

    Easly schrieb:

    Ich habe es hingekriegt
    Lässt Du uns an Deiner Lösung teilhaben?
    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!

    VB.NET-Quellcode

    1. Dim w As Integer = x - 100
    2. If ListView1.Items.Count > 100 Then
    3. ListView1.Items.RemoveAt(0)
    4. End If
    5. ListView1.Items.Add(x).SubItems.Add(z)
    6. Label2.Text = "X = " & sx & " | Z = " & sz
    7. Label3.Text = x


    halt genau das, das du mir geraten hast. =) Danke dafür!

    Na ja, ist so eine Mischung aus deinem und dem Teil von kai996, aber das Problem, das ich eben eigentlich hatte (das Entfernen also) hast du ja gelöst. =)