Listview Inhalt aktualisieren (Problem mit Subitem Index)

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von d3luxee.

    Listview Inhalt aktualisieren (Problem mit Subitem Index)

    Hallo auch wenn der Titel wohl etwas misslungen ist hoffe ich das man mir dennoch helfen kann!

    Also mein Problem besteht darin das ich den inhalt eines ListViews aus einem Thread heraus updaten möchte, hierzu Invoke ich natürlich einen aufruf soweit so gut, jedoch bekomme ich jedes mal den Error:

    Quellcode

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


    Hier der Code:

    Der Invoke:

    VB.NET-Quellcode

    1. For i As Integer = 0 To fav_listview.Items.Count - 1
    2. fav_listview.Invoke(New Upd(AddressOf Add), i, favserver(i).Hostname, favserver(i).Map, favserver(i).Gametype, favserver(i).Hardcore, favserver(i).Player)
    3. Next
    4. fav_listview.Invoke(New reloadd(AddressOf Reload), fav_listview)




    Die Delegates und Subs:

    VB.NET-Quellcode

    1. Delegate Sub reloadd(lst As ListView)
    2. Delegate Sub Upd(index As Integer, host As String, map As String, gametype As String, hc As String, player As String)
    3. Sub Add(index As Integer, host As String, map As String, gametype As String, hc As String, player As String)
    4. fav_listview.BeginUpdate()
    5. With fav_listview.Items(index)
    6. ' 1. Eintrag hinzufügen
    7. .SubItems(0).Text = host
    8. .SubItems(1).Text = map
    9. .SubItems(2).Text = gametype
    10. .SubItems(3).Text = hc
    11. .SubItems(4).Text = player
    12. End With
    13. fav_listview.EndUpdate()
    14. End Sub
    15. Sub Reload(lst As ListView)
    16. lst.Refresh()
    17. End Sub



    Ich finde den Fehler darin einfach nicht ich hoffe jemand mit etwas mehr Erfahrung kann mir sagen was mein Fehler ist!

    PS: Vielen dank für die info bezüglich des Editors.

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

    Also erst alle Daten abrufen und danach per Event die Daten Aktualisieren?



    Edit:

    Also die Daten werden beim start des Programms erstmal komplett abgerufen, aber sowohl das updaten des listviews per thread wie auch das updaten über einen Button bringt den selben Error!

    Das sagt mir das nicht der Thread das problem ist sondern die Methode mit der ich die SubItems update!

    Wenn ich das SubItem(0) aufrufe was der erste eintrag ist entsrpicht das dem listview.items().text sobald ich bei den subitems aber einen index 1 oder größer verwende gibt es den folgenden Error:

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



    Es wäre super wenn jemand eine Lösung kennt!

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

    hmm, es ist unklar ob er nun mit dem Index Deiner Subitems Probleme hat oder einem Deiner Parameter mit Namen 'Index'. Weisst Du denn überhaupt wo genau / bei welcher Zeilennummer der Fehler auftritt ?

    Setzt doch mal mit dem Debugger einen entsprechenden Breakpoint auf die Methode Add und geh per Einzelschritt durch. Dann kannst Du im Fehlerfall auch gleich ermitteln wo es hakt ...

    Weiterhin ist Dein Programm-Design nicht OK:
    - pack Deine Daten in eine Klasse playerData (?)
    - löse bei Update / AddNew ein Ereignis aus mit den Update-Daten selber
    - Listview abonniert das Ereignis und passt an

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

    naja - vlt. ists Problem auch so einfach wie was: nämlich dass das ListViewItem nicht genügend SubItems vorhält - gugge vlt. auch Exceptions, und was sie uns sagen wollen - ArgumentOutOfRangeException.

    Das ändert aber nix dran, dassde dein Threading umgestalten mußt. Für jedes einzelne Item einen Threadwechsel per Invoke tätichmal als NoGo bezeichnen (abgesehen davon, dass beidir im NebenThread ListView.Items.Count abgerufen wird, was auch nicht die reine Lehre ist)
    naja - vlt. ists Problem auch so einfach wie was: nämlich dass das ListViewItem nicht genügend SubItems vorhält - gugge vlt. auch Exceptions, und was sie uns sagen wollen - ArgumentOutOfRangeException.


    Das war das Problem ich hab vorher beim erstellen nur ein Item eingetragen.. und wollte später durch SubItems die leeren nachträglich einfügen.

    Es funktioniert jetzt jedoch würde ich gerne die Ratschläge bezüglich Threading von euch beherzigen da ich damit wirklich nicht viel Erfahrung habe und sicher von euch lernen kann.
    Es wäre nett wenn ihr mir das ganze noch etwas näher erläutern könntet.