Page 1 sur 1

problème AddGadgetItem RemoveGadgetItem

Publié : mar. 12/juil./2016 15:42
par david
je suis en train de devenir fou!!!
ça fait huit jour que je suis dessus et je n'y comprend rien, j'en conclut donc que ce doit être une evidence
merci de m'expliquer ce qui m'échappe!!! HELP

je crée une liste d'éléments valeur de 0 à 4 pour item 0 à 4
je veux vider cette liste (pour la remplacer par une autre)
et la c'est le drame...

Code : Tout sélectionner

Enumeration Window
  #MainForm ;IDentifiant fenetre principale
  #SecForm  ;IDentifiant fenetre secondaire
EndEnumeration

Enumeration
#GadgetListSecond
EndEnumeration

#LibLib = "Libellé"
#LibQ =   "Qté"
#LibHT =  "Prix HT"
#LibTVA = "TVA"
#LibTTC = "Prix TTC"









If OpenWindow(#SecForm, 100, 200,  420, 400, "Double-clic pour VALIDER le produit", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_Minimize )
SetWindowState(#SecForm, #PB_Window_Normal) ;##
  ListIconGadget(#GadgetListSecond, 10, 10, 400, 200, #LibLib, 200)
  AddGadgetColumn(#GadgetListSecond, 1, #LibTTC, 98)
  AddGadgetColumn(#GadgetListSecond, 2, #LibTVA, 98)
  
  SetGadgetState(#GadgetListSecond, 8)
  
  
  For i=0 To 4;ChxProdNb
          AddGadgetItem(#GadgetListSecond, -1, Str(i) +Chr(10)+ Str(i) +Chr(10)+ Str(i))
         ;  AddGadgetItem(#GadgetListSecond, i, Str(i) +Chr(10)+ Str(i) +Chr(10)+ Str(i))
          Next i
  ;Boucle evenementielle jusqu'à fermeture de la fenetre
  Repeat 
     Event = WaitWindowEvent(10) 
   
     
     
  Until Event =#PB_Event_CloseWindow
      For Suppr = 0 To 4
               RemoveGadgetItem(#GadgetListSecond,Suppr)
             Next Suppr
             
             MessageRequester("fin","fin")
 EndIf

Re: problème AddGadgetItem RemoveGadgetItem

Publié : mar. 12/juil./2016 16:08
par falsam
Remplaces

Code : Tout sélectionner

For Suppr = 0 To 4
    RemoveGadgetItem(#GadgetListSecond,Suppr)
  Next Suppr
par

Code : Tout sélectionner

 ClearGadgetItems(#GadgetListSecond)

Re: problème AddGadgetItem RemoveGadgetItem

Publié : mar. 12/juil./2016 16:30
par david
Ah oui, là ça va mieux effectivement
Je vais pouvoir le réintégrer dans mon programme..
Merci

Et sinon d'où vient le problème, pourquoi dans mon code il n'efface pas tous les éléments
J'ai râté quelque chose?

Re: problème AddGadgetItem RemoveGadgetItem

Publié : mar. 12/juil./2016 18:18
par Zorro
david a écrit :Et sinon d'où vient le problème, pourquoi dans mon code il n'efface pas tous les éléments
J'ai râté quelque chose?
oui je pense ! :)

lorsque tu fais :

Code : Tout sélectionner

For Suppr = 0 To 4
    RemoveGadgetItem(#GadgetListSecond,Suppr)
  Next Suppr 
que se passe t'il ?
on a donc 5 elements

0
1
2
3
4

debut de boucle reviens a faire

RemoveGadgetItem(#GadgetListSecond,0)

donc la liste deviens :
0
1
2
3

pourquoi ? ben parce qu'en supprimant l’élément zero , tout les éléments se sont decalés vers le haut !!
le zero n'existe plus donc le 1 prends la place du zero
le 2 prends la place du 1 ; le 3 prends la place du 2 etc .....


ton code qui le démontre ; clique sur la croix pour quitter le prg , et fait avancer Pas a pas avec le debugger
regarde ce qui se passe lorsque tu aura passé le RemoveGadgetItem()

Code : Tout sélectionner

Enumeration Window
	#MainForm ;IDentifiant fenetre principale
	#SecForm  ;IDentifiant fenetre secondaire
EndEnumeration

Enumeration
	#GadgetListSecond
EndEnumeration

#LibLib = "Libellé"
#LibQ =   "Qté"
#LibHT =  "Prix HT"
#LibTVA = "TVA"
#LibTTC = "Prix TTC"









If OpenWindow(#SecForm, 100, 200,  420, 400, "Double-clic pour VALIDER le produit", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_Minimize )
	SetWindowState(#SecForm, #PB_Window_Normal) ;##
	ListIconGadget(#GadgetListSecond, 10, 10, 400, 200, #LibLib, 200)
	AddGadgetColumn(#GadgetListSecond, 1, #LibTTC, 98)
	AddGadgetColumn(#GadgetListSecond, 2, #LibTVA, 98)
	
	SetGadgetState(#GadgetListSecond, 8)
	
	
	For i=0 To 4;ChxProdNb
		AddGadgetItem(#GadgetListSecond, -1, Str(i) +Chr(10)+ Str(i) +Chr(10)+ Str(i))
		;  AddGadgetItem(#GadgetListSecond, i, Str(i) +Chr(10)+ Str(i) +Chr(10)+ Str(i))
	Next i
	;Boucle evenementielle jusqu'à fermeture de la fenetre
	Repeat
		Event = WaitWindowEvent(10)
		
		
		
	Until Event =#PB_Event_CloseWindow
	
	calldebugger
	;For Suppr = 0 To 4
		RemoveGadgetItem(#GadgetListSecond,0) ; suprimons l'index 0 et regardons ce que nous avons		
	;Next Suppr
	; les index se sont bien decalé vers le haut !!! 
	
	
	
	MessageRequester("fin","fin")
EndIf

puis ta boucle continue, donc cherche a effacer l'indice numero 1 sur la liste suivante :

donc la liste etait devenu :
0 (ex 1)
1 (ex 2 )
2 (ex 3 )
3 (ex 4 )


en effaçant l'indice 1 on se retrouve avec :

0 (ex 1) <<<<< celui ci n'est pas suprimé et ne le sera pas !!!
1 (ex 2 ) <<<< celui ci est suprimé !!
2 (ex 3 )
3 (ex 4 )

resultat :

0 (ex 1) <<<<< celui ci n'est pas suprimé et ne le sera pas !!!

1 (ex 3 maintenant EX 2)
2 (ex 4 maintenant EX 3)


en esperant avoir été clair :)


pour tout effacer voici ce que tu aurai pu faire

Code : Tout sélectionner

calldebugger
	For Suppr = 0 To 4
		RemoveGadgetItem(#GadgetListSecond,0) ;voici la bonne methode pour effacer , on efface toujours le premier element
; puisque les elements remonte d'un indice, petit a petit on les aura tous effacés !! 
	Next Suppr

mais Purebasic dispose effectivement d'une fonction faites pour ça :)

[RESOLU] Re: problème AddGadgetItem RemoveGadgetItem

Publié : mar. 12/juil./2016 20:36
par david
bon là c'est clair
merci
je suis content parceque cleargadgetitem a solutionné mon pb ; mais en même temps si on veut avancer il faut comprendre...

Sinon, j'ai aussi compris que je resterais à jamais débutant en PB, mais en même temps quand je vois tout ce que l'on peut faire en restant débutant, je reste conquis à jamais!

Alors merci PB, merci à son créateur, merci à tous ceux qui aident à avancer chaque jour les grands et les petits