[R] Listes de combo vides

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

[R] Listes de combo vides

#1

Message 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.
Modifié en dernier par aulus le jeu. 06 juin 2013 22:04, modifié 1 fois.
lesolutionneur
Niveau 7
Niveau 7
Messages : 368
Enregistré le : ven. 09 déc. 2011 11:25
Status : Hors ligne

Re: [..] listes de combo vides

#2

Message 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).
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] listes de combo vides

#3

Message 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.
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] listes de combo vides

#4

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] listes de combo vides

#5

Message 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 ^^
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] listes de combo vides

#6

Message 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.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] listes de combo vides

#7

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] listes de combo vides

#8

Message 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 !!! :(
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] listes de combo vides

#9

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] listes de combo vides

#10

Message 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 ?
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] listes de combo vides

#11

Message 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
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
aulus
Niveau 7
Niveau 7
Messages : 424
Enregistré le : lun. 25 mars 2013 19:38
Status : Hors ligne

Re: [..] Listes de combo vides

#12

Message 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.
Répondre