Seite 1 von 1

Bug mit SetGadgetItemText() und Listviews

Verfasst: 17.11.2004 21:54
von Ynnus
Hello,

I've found a big bug with SetGadgetItemText() in combination with a ListViewGadget().

The following code should count from 0 to 0 (for n = 0 to 0 because the number of items in the listview is 0) but it counts up to infinitely. The counting-variable "n" does not stop at the ending of the for loop and increases more and more.

Code: Alles auswählen

OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "wij")
  CreateGadgetList(WindowID())
  ListViewGadget(0, 0, 0, 400, 400)

  Debug "Items in Gadget: " + Str(CountGadgetItems(0))

For n = 0 To CountGadgetItems(0)
  SetGadgetItemText(0, n, "Inhalt", 0)
  Debug "counter: " + Str(n)
Next n

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

And even with some items in the list before we make the for loop with SetGadgetIemText, the same bug appers:
(Here we first create 2 items so it should count from 0 to 2)

Code: Alles auswählen

OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "wij")
  CreateGadgetList(WindowID())
  ListViewGadget(0, 0, 0, 400, 400)
  AddGadgetItem(0, -1, "item1")
  AddGadgetItem(0, -1, "item2")
 
  Debug "Items in Gadget: " + Str(CountGadgetItems(0))

For n = 0 To CountGadgetItems(0)
  SetGadgetItemText(0, n, "Inhalt", 0)
  Debug "counter: " + Str(n)
Next n

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

And another pretty important question is, WHY is this command "SetGadgetItemText()" creating gadtet-items? Shouldn't it only change the text of items? But here it creates items and it disturbs for-loops and make them working wrong.
A bug which has to be fixed very soon I think, now you can't use SetGadgetItemText() with listviewgadgets without having bugs. (Strange that nobody before me recognized that).

I've tested the code with 3.92 and 3.90 for windows, different versions, same bug.
Sieht aus wie ein echt dummer bug, ich kann garkeine Listviews mit SetGadgetItemText() verwenden, da immer For-Schleifen inkorrekt laufen und Items erstellt werden anstatt umbenannt zu werden.

mfg.

Sunny

Verfasst: 17.11.2004 22:46
von Team100
@sunny

...... ganz klar wo der Fehler liegt:

Einfügen des Debug-Befehles macht es klar:

Code: Alles auswählen

OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "wij") 
  CreateGadgetList(WindowID()) 
  ListViewGadget(0, 0, 0, 400, 400) 

 Debug "Items in Gadget: " + Str(CountGadgetItems(0)) 
  
 For n = 0 To CountGadgetItems(0) ;..... CountGadgetItems wird immer wieder aufgerufen 
   SetGadgetItemText(0, n, "Inhalt", 0) 
   Debug "counter: " + Str(n) 
   ;************
   Debug CountGadgetItems(0) 
   ;************
 Next n 

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

In der For-Schleife wird CountGadgetItems immer wieder
aufgerufen .... wegen des neuen Eintrages erhöht sich jedoch
der Wert um 1, deshalb wird das ganze eine unendliche
Geschichte.....

und so läuft es korrekt:

Code: Alles auswählen

OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "wij") 
  CreateGadgetList(WindowID()) 
  ListViewGadget(0, 0, 0, 400, 400) 

 Debug "Items in Gadget: " + Str(CountGadgetItems(0)) 

 aktuelle_anzahl.l = CountGadgetItems(0)
 
 For n = 0 To aktuelle_anzahl 
   SetGadgetItemText(0, n, "Inhalt", 0) 
   Debug "counter: " + Str(n) 
 Next n 

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Cu von team100

Verfasst: 17.11.2004 23:30
von Ynnus
Aber wieso fügt dann SetGadgetItemText() überhaupt ein neues Element hinzu? Da ist doch nix, die Liste ist leer, normalerweise sollte man den Itemtext der Liste garnicht ändern können. Wo nix ist, kann man auch keinen Text ändern. Von daher besteht da immer noch eine Art bug. :?

Verfasst: 18.11.2004 00:12
von Team100
@sunny

...nein, das Element 0 ist leer vorbelegt, deshalb kann
man es auch ändern. :wink:

...schreibt man ein neues Element, so wird das nächstfolgende
leer angelegt.

...Ändert man mit SetGadgetItemText ein nicht existentes
Element (= ein nicht eingtragenes oder ein nicht das auf das letzte
eingetragene folgend leer vorbelegtes Element *pfhh- amtsdeutsch*),
so wird natürlich nichts neu eingetragen...

Code: Alles auswählen


OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "wij") 
  CreateGadgetList(WindowID()) 
  ListViewGadget(0, 0, 0, 400, 400) 

 Debug "Items in Gadget: " + Str(CountGadgetItems(0)) 

 aktuelle_anzahl.l = CountGadgetItems(0) 

Debug SetGadgetItemText(0, 0, "Inhalt0", 0) 
Debug SetGadgetItemText(0, 1, "Inhalt1", 0) 
Debug SetGadgetItemText(0, 2, "Inhalt2", 0) 
Debug SetGadgetItemText(0, 4, "Inhalt4", 0) 

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Die leere Vorbelegung würde ich nicht als Bug bezeichnen.
Eher sollte die Dokumentation darauf hinweisen, daß immer
das nächstfolgende Element leer vorbelegt ist.

...Übrigens liefert SetGadgetItemText einen Rückwert,
nämlich die aktuelle Zeilennummer bzw. -1 wenn sich
nichts ändern hat lassen. Scheint undokumentiert zu sein....

PureBasic, immer für Überraschungen gut .... :mrgreen:

(getestet mit PB3.91)

Cu von Team100

Verfasst: 18.11.2004 01:30
von Ynnus
Dann gibts da aber immer noch einen Bug:

Ich erstelle einfach mal ein Item an Stelle 0 und weiße später per SetGadgetItemText() einen neuen Text zu, DIESEM Item auf Platz 0. Dumm dass jetzt plötzlich ein weiteres Item an der Stelle 0 erstellt wird, und das andere auf Platz 1 rutscht. Somit ist das nix anderes als wenn ich ein Item einfüge und dieses an der Stelle 0 angebe. Doch dieser Befehl sollte eigentlich den Text des Eintrags ändern, nicht ein weiteres Element eintragen. Da kannst du jetzt wohl kaum noch von feature oder sonstwas sprechen oder? Das ist doch wohl eindeutig ein bug.

Code: Alles auswählen

OpenWindow(0, 0, 0, 500, 500, #PB_Window_SystemMenu, "wij")
  CreateGadgetList(WindowID())
  ListViewGadget(0, 0, 0, 400, 400)
  AddGadgetItem(0, -1, "Inhalt0")
  SetGadgetState(0, 0)

  aktuelle_anzahl.l = CountGadgetItems(0)

  Debug SetGadgetItemText(0, 0, "Inhalt1", 0)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Verfasst: 18.11.2004 08:43
von Pfaelzer
Wieviele Threads sollen diesem Bug denn gewidmet werden ? :roll:

Ich habe diesen Fehler bereits vorgestern hier gepostet und gestern im englischen PB-Forum wo er jetzt auch doppelt vorkommt.

@Admin: Sollten die Threads nicht der Übersichtlichkeit halber zusammengelegt werden ?

Verfasst: 19.11.2004 01:22
von Andre
Also was die Anleitung angeht, darum kann ich mich kümmern.

Ansonsten sieht Fred den Bug im englischen Forum ja direkt selbst ... 8)