Okay, ich habe ein kleines Testprogramm geschrieben - ich hoffe Ihr kommt damit klar:
Code: Alles auswählen
;Fenster initialisieren
If OpenWindow(1,1,1,600,400,#PB_Window_SystemMenu | #PB_Window_ScreenCentered,"Testprogramm ListView") = 0
MessageRequester("Fehler","Konnte Fenster nicht initialisieren")
EndIf
;GadgetList aufbauen
If CreateGadgetList(WindowID()) = 0
MessageRequester("Fehler","CreateGadgetList wurde nicht ausgeführt")
EndIf
;Ein paar Gadgets definieren
ListViewGadget(10,1,1,590,300)
ButtonGadget(20,1,310,100,20,"Eintrag hinzufügen")
ButtonGadget(21,100,310,200,20,"letzten Eintrag ändern")
TextGadget(30,400,310,100,20,"Letzer Eintrag:")
TextGadget(31,500,310,100,20,"ggg")
;Hauptschleife
Repeat
;WindowEvent abfragen
EventID=WaitWindowEvent()
;Welches Event ?
Select EventID
;Fenster schliessen
Case #PB_Event_CloseWindow
Programmende=1
;Ein GadgetEvent
Case #PB_EventGadget
;Welches GadgetEvent
Select EventGadgetID()
;Button Eintrag hinzufügen
Case 20
;Zufallszahl in Stringvariable schreiben
text$=Str(Random(1000))
;Textvariable dem ListView-Gadget hinzufügen
AddGadgetItem(10,-1,text$)
;Letzen Eintrag in TextGadget anzeigen
SetGadgetText(31,GetGadgetItemText(10,CountGadgetItems(10)-1,1))
;Button Letzten Eintrag ändern
Case 21
;Zufallszahl in Stringvariable schreiben
text$=Str(Random(1000))
;Position ermitteln
Position = CountGadgetItems(10) - 1
;Position ausgeben
MessageRequester("Testausgabe",Str(Position))
;Letzten ListView-Eintrag ändern
SetGadgetItemText(10,Position,text$,0)
;Letzten Eintrag in TextGadget schreiben
SetGadgetText(31,GetGadgetItemText(10,CountGadgetItems(10)-1,1))
EndSelect
EndSelect
Until Programmende = 1
Nochmals zum Problem - das Programm dürfte dieses noch verdeutlichen:
Unter Version 3.91 wird beim klicken auf den "letzten Eintrag ändern"-Button der letzte Eintrag der ListView geändert und dieser Inhalt auch korrekt in dem TextGadget angezeigt.
Unter Version 3.92 wird beim klicken auf den "letzten Eintrag ändern"-Button der neue Wert VOR den letzten Eintrag geschrieben, der (echte) letzte Eintrag bleibt natürlich im TextGadget stehen.
Ändere ich den Positionswert bei SetGadgetItemText auf CountGadgetItems statt CountGadgetItems-1 fügt er den neuen Wert als neuen Eintrag hinzu statt den bisher letzten äbzuändern - wäre aber mathematisch eh falsch.
Bei CountGadgetItems+1 passiert - entgegen meiner vorherigen Behauptung- garnichts (ist ja auch korrekt so) - sorry.
CountGadgetItems liefert die korrekte Anzahl an Einträgen der ListView zurück - daran liegts also nicht.
Allerdings scheint bei SetGadgetItemText kein bestehender Eintrag geändert zu werden, sondern es wird immer ein neuer hinzugefügt - wie bei AddGadgetItem.
Ich denke hier haben wir einen Bug, oder ?
Edit: Ich habe das Programm noch etwas abgeändert, sodaß er in die Variable Position die Anzahl der Items - 1 ermittelt und diesen Wert per MessageRequester ausgibt - nur um CountGadgetItems zu prüfen.