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
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 :mrgreen:

Code : Tout sélectionner

GUIDelete($Civilite)
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 :

Code : Tout sélectionner

GUICtrlSetData($Civilite, "Mademoiselle|Madame|Monsieur")
 
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 :

Code : Tout sélectionner

GUICtrlSetData($Civilite, $Item[3])
 
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
:D 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... :D Grâce à vous et à votre patience, je vais faire de beaux rêves...

Grand merci pour tout.