[VB 2010] Problem mit List

07/25/2011 18:53 Klenix123#1
Hallo Leute,
ich bin gerade dabei einen Darkorbti BOt zu schreiben, ist bessergesagt schon fast fertig, jedoch hab ich ein Problem mit dem Removen von BonusBoxen aus einer List,

die Boxen werden duch eine eigene KLasse mit 2 Double und 1 String in der List "festgehalten" aber nachdem ich sie collected habe, brauche ich sie ja nichtmehr und möchte sie löschen. Und da ist das problem, sie wird entfernt, der count blaib jedoch gleich und das "leere" bonusbox item in der lis tverursacht einen Absturtz von dem Programm... Ich hab es mit allem Probiert, Remove, RemoveAt usw....

das probelm ist immer das gleiche...

Vielleiht hat einer ne idee oder kann mir per skype helfen!?!

mit freundlichen Grüßen
Klenix
07/25/2011 20:39 Kraizy​#2
Zeig mal deine Versuche.
07/25/2011 21:01 Klenix123#3
Welche Versuche?
07/26/2011 11:10 Miraculi ii#4
benutzt du eine listview?
erkläre mal dein problem etwas genauer ^^
du versuchst etwas aus der listview zu etfernen, es geht auch weg und dann stürzt das programm ab ?
was für einen fehler zeigt es an?
im notfall setze den error doch in eine try schleife ;)
07/26/2011 11:58 Kraizy​#5
Quote:
Originally Posted by Klenix123 View Post
Welche Versuche?
Wo du was versuchst zu löschen, wie deine Liste aussieht und wo/was für ein Fehler kommt. Verstehe deinen 1. Beitrag nicht so ganz..
07/26/2011 13:49 Klenix123#6
Also:
Code:
Case Remove_Box
RemoveB(Split(i + 2))
Hier wird der Code der Box an die Remove Sub übergeben

HIer die Remove Sub:
Code:
For i as Integer = 0 to BonusBoxenList.Count - 1
If BonusBoxenList(i).Item.getCode <Beides Möglich> BonusBoxenList.Item(i).getCode = Code(Kommt aus dem Byval) Then
BonusBoxenList.RemoveAt(i)
End If
Next
End Sub
Hier werden die daten aus der List, also aus dem Index(i) removed, jedoch nur die Daten, der indexeintrag bleibt vorhanden und ist keine gültige bonusbox mehr!
07/26/2011 16:18 nkkk#7
[Only registered and activated users can see links. Click Here To Register...]

damit kann man das relertiv einfach (sogar ohne eine schleife oder ein if) lösen, denke mal das es in VB genauso geht wie in C#:

C# code:
Code:
BonusBoxenList = BonusBoxenList.Where(bbox => bbox.getCode != Code).ToList();

da ich ich von deinem code nur das gesehen habe was du geschreiben hast, und ich mit der VB syntax nicht zu 100% verraut bin, übernehme ich keine garantie für den code das er klappt ; )
07/26/2011 18:54 Klenix123#8
das is ja nicht das problem, nicht das entfernen an sich, sondern das der index "beschädigt" wird und das item mit dem index keine BonusBox mehr ist und ein fehler auftritt, sobald ich das .getCode einsetzte...
07/26/2011 20:56 nkkk#9
ist dein "problem" eine IndexOutOfRangeExpeption ?
dann solte meine methode dein problem lösen, ansonsten musst du dich schon etwas genuer ausdrücken....
07/27/2011 14:01 Miraculi ii#10
verstehe ich das richtig?
du möchtest einen bestimmten index aus der list löschen und ihn danach wieder aufrufen oder wie oO ? XD
07/27/2011 14:31 Klenix123#11
nein, er soll weg sein und der count um das eine ding weniger, aber der index wird "beschädigt" und beim nächsten aufruf versuch gibts dann en fehler.
07/27/2011 15:20 nkkk#12
hast du mein ersten post überhaupt verstanden ?
oder den code getestet ?
07/27/2011 15:28 Klenix123#13
nicht wirklich, hab nichtmal die funktionen in vb gefunden, obwohls die eig geben müsste...
07/28/2011 23:08 nkkk#14
:facepalm: naja wie auch immer, ich denke deinproblem liegt am filgenden:

die schleife ist abhänig von deineliste.Count aber innnerhalb der schleife veränderst du deineliste.Count dadurch, das du einträge entfernst, das "verwirrt" sozusagen die schleife.

man kann d problem auf verschiede arten lösen (so wie in meinem ersten post z.B. aber acuh mit einer anderen art von shleife.)