[R] Listes de combo vides
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Listes de combo vides
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.
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.
Modifié en dernier par aulus le jeu. 06 juin 2013 22:04, modifié 1 fois.
-
lesolutionneur
- Niveau 7

- Messages : 368
- Enregistré le : ven. 09 déc. 2011 11:25
- Status : Hors ligne
Re: [..] listes de combo vides
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).
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
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.
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
J'ai essayé :
et
Mais ça ne marche pas.
Code : Tout sélectionner
If @GUI_CtrlId = $ModifierBouton Then GUICtrlSetData($Civilite,"Mademoiselle|Madame|Monsieur")
Code : Tout sélectionner
If GUICtrlRead($Civilite) = "" Then GUICtrlSetData($Civilite,"Mademoiselle|Madame|Monsieur")
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] listes de combo vides
C'est là où montrer du code fonctionnel (au moins la partie concernée) est important, parce que ce que tu as posté fonctionnedonc pas de réponse possible ^^
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] listes de combo vides
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.
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.
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] listes de combo vides
Alors c'est que le pb est en amont de la combo, faudrait essayer un truc comme çaSinon je donne ma langue au chat pour cause de données insuffisantes
Code : Tout sélectionner
If @GUI_CtrlId = $btn Then
If $data = "" Then $data = "Mademoiselle|Madame|Monsieur"
GUICtrlSetData($combo, $data)
EndIf
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] listes de combo vides
Non, ça ne marche pas. Par contre, j'ai essayé :
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 !!! 
Code : Tout sélectionner
If @GUI_CtrlId = $ModifierBouton Then
GUIDelete($Civilite)
$Civilite = GUICtrlCreateCombo("", 630, $Haut, 120, 20)
GUICtrlSetData($Civilite,"Mademoiselle|Madame|Monsieur")
EndIf
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] listes de combo vides
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
Code : Tout sélectionner
GUIDelete($Civilite)J'ai testé le code au-dessus en lisant un .txt vide pour $data et ça marche
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] listes de combo vides
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 ?
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 :
Code : Tout sélectionner
GUICtrlSetData($Civilite, "Mademoiselle|Madame|Monsieur")
DUPONT|Pierre|Monsieur|20 10 1980
et que je code :
Code : Tout sélectionner
GUICtrlSetData($Civilite, $Item[3])
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 ?
- mikell
- Spammer !

- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] listes de combo vides
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 :
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" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Re: [..] Listes de combo vides
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...
Grand merci pour tout.
