Page 1 sur 1

[R]Coincé dans une boucle while

Posté : mar. 19 janv. 2021 10:57
par YuChan
Bonjour,

je me retrouve coincé dans une boucle WHILE, voici mon code :

Code : Tout sélectionner

While 1
	Switch GUIGetMsg()
		
		Case $listeChoixConfirmOK
			Global $choixMenuConfirm = GUICtrlRead($listeConfirmChoix)

			If $choixMenuConfirm == "Confirmer le menu" Then
				GUIDelete($GUIlisteConfirmChoix)
				_GUIAction()
				_ecrireNote($fFile, $txt1)
				MsgBox(0, "Info", "Votre texte a été enregistré")
				
				While 1
					Switch GUIGetMsg()
						
					Case $btnSelectActionOK
						;MsgBox(64, "", "OK")
						_GUIConfirmChoix()
						If $choixMenuConfirm == "Confirmer le mennu" Then
							GUIDelete($GUIlisteConfirmChoix)
							$txt1 = GUICtrlRead($actionList)
							_ecrireNote($fFile, $txt1)
							MsgBox(0, "Info", "Votre texte a été enregistré")
						EndIf
						
					EndSwitch 
				Wend
				
			EndIf
	EndSwitch
	
WEnd  
la boucle fonctionne mais je dois rajouter encore et encore des while.

Comment pourrais je faire svp.

Merci

Re: Coincé dans une boucle while

Posté : mar. 19 janv. 2021 12:17
par Tlem
Bonjour.

En l'état, nous n'avons pas assez d'éléments pour faire des investigations concluantes.
Mais une chose est sure, une boucle dans une boucle et une chose qu'il faut à tout pris éviter car cette technique n'est pas très simple à maitriser.
Pour preuve, dans la première boucle, juste après le $choixMenuConfirm == "Confirmer le menu" vous faites un GUIDelete($GUIlisteConfirmChoix) et dans la boucle imbriquée vous remettez exactement le même code ... Comment pouvez-vous supprimer deux fois la même GUI. :shock:

Il y a clairement un problème, donc votre code est à revoir pour fonctionner sans cette imbrication de boucles.
Si cela vous pose trop de problèmes, alors passez en mode événementiel. Le code sera plus long, mais bien plus clair et simple à modifier.

Sachez aussi que sans une excellente raison, il est déconseillé de détruire une GUI. Généralement on effectue cette opération car cette GUI ne sera plus jamais utilisée dans le code ou lorsqu'on doit la reconstruire avec des éléments complètement différents. Si vous réutilisez votre GUI ou si elle est "statique", il serait plus sage de la masquer/l'afficher (selon les besoins) avec GUISetState(@SW_SHOW) ou GUISetState(@SW_HIDE)

Re: Coincé dans une boucle while

Posté : mar. 19 janv. 2021 19:39
par Boulanza
Bonjour,
Ceci peut être une idée à votre solution!
Cordialement.
Func InfoRGUIAction()
While 1
Sleep(5000)
If $choixMenuConfirm == "Confirmer le menu" Then
GUIDelete($GUIlisteConfirmChoix)
_GUIAction()
EndIf
EndFunc

Re: Coincé dans une boucle while

Posté : mer. 20 janv. 2021 01:03
par Tlem
Ha bravo !!!
Non seulement ce code est faux car il manque le Wend de la boucle While, mais en plus, comment sortiriez-vous de celle-ci ?
Et je passe sur l'attente de 5 secondes avant de tester la variable pour éventuellement exécuter le code de la condition qui soit dit en passant utilise le GUIDelete malgré mes recommandations ...

@Boulanza
Habituellement, je m'abstiens de vous répondre, mais là, difficile de laisser passer ce genre de chose après mon message précédent.
C'est très gentil de vouloir aider, mais vous devriez continuer de vous contenter de demander de l'aide.
Entre votre tentative d'aider ci-dessus et celle-ci, c'est franchement pas une réussite.
Continuez d'apprendre sur vos propres codes et lorsque vous n'aurez pratiquement plus besoin d'aide, là vous pourrez envisager d'aider les autres.

Bonne soirée/journée

Re: Coincé dans une boucle while

Posté : mer. 20 janv. 2021 06:08
par YuChan
Tlem merci, tu as remarqué qu'il manqué du code et en effet oui si je l'ais pas mis c'est que j'ai pris l'essentiel.

Aussi j'ai reussi à finir le script avec beaucoup de chance et de logique.

La solution était de mettre un

Code : Tout sélectionner

ExitLoop
et supprimer quelque while en trop, car le code que j'ai donné et déjà dans 2 while.

Merci

Re: [R]Coincé dans une boucle while

Posté : mer. 20 janv. 2021 15:16
par TommyDDR
Juste pour information, "l'essentiel" est censé être un code que l'on peut copier dans un nouveau script et lancer directement.

Re: [R]Coincé dans une boucle while

Posté : sam. 23 janv. 2021 09:52
par YuChan
TommyDDR

Je prends note et je ferais comme ça désormais.