Page 1 sur 1
[R] Listes de combo vides
Posté : jeu. 06 juin 2013 17:07
par aulus
Bonjour,
Lorsque les champs de saisie d'un formulaire de type "combo" sont préremplis par des données puisées dans un fichier texte (données préalablement rentrées par le même formulaire),deux cas se présentent :
- si les données sont absentes (le champ correspondant du fichier est vide), les listes déroulantes sont vides.
- si les données existent (les champs correspondant du fichier ont été préalablement remplis), les listes déroulantes sont complètes.
A quoi est dû ce phénomène ? Comment résoudre cette question ?
Merci beaucoup de votre aide.
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 17:21
par lesolutionneur
Il faudrait que tu nous montres ton code.
Normalement, il suffirait d'une simple condition lors de la lecture de ce fichier pour déterminer si le champs est vide ou non (rien ou que des espaces).
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 17:31
par aulus
Je vous remercie.
Mon code est un peu long. En gros j'ai un formulaire que l'utilisateur remplit pour ajouter un enregistrement dans un fichier texte.
Un bouton lui permet de modifier l'enregistrement en rappelant le même formulaire, prérempli par une lecture de la ligne adéquate du fichier texte. C'est là que le problème des combo vides se pose.
Je ne vois pas du tout comment coder la condition pour que le combo se remplisse quel que soit le contenu du controle de saisie.
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 17:55
par aulus
J'ai essayé :
Code : Tout sélectionner
If @GUI_CtrlId = $ModifierBouton Then GUICtrlSetData($Civilite,"Mademoiselle|Madame|Monsieur")
et
Code : Tout sélectionner
If GUICtrlRead($Civilite) = "" Then GUICtrlSetData($Civilite,"Mademoiselle|Madame|Monsieur")
Mais ça ne marche pas.
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 18:25
par mikell
C'est là où montrer du code fonctionnel (au moins la partie concernée) est important, parce que ce que tu as posté fonctionne
► Afficher le texte
Code : Tout sélectionner
Opt("GuiOnEventMode", 1)
GUICreate("My GUI")
GUISetOnEvent(-3, "_exit")
$combo = GUICtrlCreateCombo("", 10, 10)
$btn = GuiCtrlCreateButton("", 20, 40, 30, 25)
GUICtrlSetOnEvent(-1, "_combo")
GUISetState()
While 1
WEnd
Func _combo()
If @GUI_CtrlId = $btn Then GUICtrlSetData($combo,"Mademoiselle|Madame|Monsieur", "Monsieur")
EndFunc
Func _exit()
Exit
EndFunc
donc pas de réponse possible ^^
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 19:36
par aulus
Bonsoir Mikell,
Oui, votre code fonctionne, tout comme le mien fonctionne quand il s'agit d'afficher des champs de saisie combos vides, ne puisant pas leurs contenus dans un champ texte. C'est le cas lorsque l'utilisateur ajoute un enregistrement au fichier texte.
Mais dans le cas d'une modification d'un enregistrement du fichier texte, quand l'utilisateur sélectionne un enregistrement à modifier, les contenus des champs de saisie sont récupérés dans le fichier texte en question. Alors, seules les listes déroulantes combos correspondant aux champs de saisie pleins s'affichent. Si les champs de saisie sont vides du fait que les champs correspondant du fichier texte sont vides, les listes déroulantes sont vides elles aussi.
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 19:56
par mikell
Alors c'est que le pb est en amont de la combo, faudrait essayer un truc comme ça
Code : Tout sélectionner
If @GUI_CtrlId = $btn Then
If $data = "" Then $data = "Mademoiselle|Madame|Monsieur"
GUICtrlSetData($combo, $data)
EndIf
Sinon je donne ma langue au chat pour cause de données insuffisantes
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 20:26
par aulus
Non, ça ne marche pas. Par contre, j'ai essayé :
Code : Tout sélectionner
If @GUI_CtrlId = $ModifierBouton Then
GUIDelete($Civilite)
$Civilite = GUICtrlCreateCombo("", 630, $Haut, 120, 20)
GUICtrlSetData($Civilite,"Mademoiselle|Madame|Monsieur")
EndIf
Cela résout le problème : la liste déroulante est complète mais.... mon combo se trouvant dans un onglet, les onglets suivants ne s'affichent plus !!!

Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 21:10
par mikell
C'est parce que tu as fait un lapsus
Mais vaudrait quand même mieux comprendre pourquoi ça bug dans la transmission de données depuis le txt (même si ces données ne sont que du vide)
J'ai testé le code au-dessus en lisant un .txt vide pour $data et ça marche
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 21:13
par aulus
Je ne crois pas : je supprime le combo puis je le recrée....
Réflexion :
GUICtrlSetData m'interroge :
Dans un combo, cette fonction semble modifier le contenu de la liste déroulante. Mais alors, comment modifie-t-on la valeur de la liste à afficher dans le champ de saisie ?
Ainsi :
Quelle fonction utiliser pour que le programme récupère la valeur enregistrée dans un fichier texte. Sachant que l'enregistrement du fichier texte propose :
DUPONT|Pierre|Monsieur|20 10 1980
et que je code :
Le programme devrait me réduire la liste déroulante à "Monsieur", plutôt que faire le choix de cet item pour l'afficher dans mon champ de saisie. Or il n'en est rien. Le champs de saisie est bien rempli de "Monsieur" et la liste déroulante est complète.
Et si l'enregistrement est : DUPONT|Pierre||20 10 1980, alors le $Item[3] est vide, la fonction GUICtrlSetData($Civilite, $Item[3]) m'affiche une liste déroulante vide...
Est-ce que les problèmes exposés plus haut ne viendraient pas de cette confusion ?
Re: [..] listes de combo vides
Posté : jeu. 06 juin 2013 21:29
par mikell
Attention si $Item[3] contient un espace c'est lui que récupère la combo
J'ai fait les 2 tests pour
DUPONT|Pierre|Monsieur|20 10 1980
DUPONT|Pierre||20 10 1980
et ça marche :
Code : Tout sélectionner
Func _combo()
If @GUI_CtrlId = $btn Then
GUICtrlSetData($combo, "")
$split = StringSplit(FileRead("1.txt"), "|")
$data = $split[3]
If $data = "" Then $data = "Mademoiselle|Madame|Monsieur"
GUICtrlSetData($combo, $data)
EndIf
EndFunc
Re: [..] Listes de combo vides
Posté : jeu. 06 juin 2013 22:03
par aulus

Je comprends seulement maintenant mon erreur de fonction (GUIDelete plutôt que GUICtrlDelete).
Je prends soin de supprimer les champs vides avec la fonction StringSplit($champ,3).
Votre dernier code m'a éclairé. J'avais rempli le $date avec "Mademoiselle|Madame|Monsieur" plutôt qu'avec $split[3]. Voilà la raison de mes échecs.
Ca a été long et éprouvant. Je suis sur les genoux...

Grâce à vous et à votre patience, je vais faire de beaux rêves...
Grand merci pour tout.