[R]Coincé dans une boucle while

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

[R]Coincé dans une boucle while

#1

Message 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
Modifié en dernier par YuChan le mer. 20 janv. 2021 06:08, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11772
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Coincé dans une boucle while

#2

Message 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)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Boulanza
Niveau 9
Niveau 9
Messages : 697
Enregistré le : mer. 31 juil. 2013 15:49
Status : Hors ligne

Re: Coincé dans une boucle while

#3

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11772
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Coincé dans une boucle while

#4

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: Coincé dans une boucle while

#5

Message 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
Avatar du membre
TommyDDR
Modérateur
Modérateur
Messages : 2085
Enregistré le : mar. 22 juil. 2008 21:55
Localisation : Nantes
Status : Hors ligne

Re: [R]Coincé dans une boucle while

#6

Message par TommyDDR »

Juste pour information, "l'essentiel" est censé être un code que l'on peut copier dans un nouveau script et lancer directement.
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679
YuChan
Niveau 5
Niveau 5
Messages : 113
Enregistré le : jeu. 12 nov. 2020 14:09
Status : Hors ligne

Re: [R]Coincé dans une boucle while

#7

Message par YuChan »

TommyDDR

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