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.
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.
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
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.