Bonjour,
Une combo-box, c'est un tableau, dont l'élément 0 affiche l'élément choisi, que l'on peut modifier. Par exemple, on aurait dit que le tableau s'appelle zeTab, a 3 éléments, et son élément courant n'a encore jamais été choisi :
{0} -> (rien)
{1} -> Pain
{2} -> Beurre
{3} -> Cornichon
zeTab = 0 ` élément courant
Par la suite, si l'utilisateur choisit le second élément, lors :
1/ 4D affecte à {0} la valeur de {2}
2/ 4D positionne la valeur "élément courant" sur 2
On aura donc
{0} -> Beurre
{1} -> Pain
{2} -> Beurre
{3} -> Cornichon
zeTab = 2
Ainsi, l'expression...
[zeTable]zeChamp:=zeTab{zeTab}
... revient à...
[zeTable]zeChamp:=zeTab{2}
... soit :
[zeTable]zeChamp:="Beurre"
Et c'est OK, pourvu que le champ et le tableau soient types compatibles.
Dans l'autre sens, il faut faire deux manipulations :
1/ Trouver, dans le tableau, la valeur du champ
2/ Mettre la valeur dans l'élément 0 du tableau :
$L_indice:=Chercher dans tableau(zeTab; [zeTable]zeChamp)
Si($L_indice > -1)
zeTab:=$L_indice
zeTab{0}:=zeTab{$L_indice}
FIn de si
Le test "Si($L_indice > -1)" sert à ne pas afficher n'importe quoi : si la valeur n'est pas trouvée dans le tableau, tout dépend de ce que tu veux en faire. Si tu veux la faire apparaitre simplement dans la combo, le code devient :
$L_indice:=Chercher dans tableau(zeTab;[zeTable]zeChamp)
Si($L_indice > -1)
zeTab:=$L_indice
zeTab{0}:=zeTab{$L_indice}
Sinon
zeTab{0}:=[zeTable]zeChamp
FIn de si
Si tu veux, en plus, ajouter la valeur au tableau :
$L_indice:=Chercher dans tableau(zeTab;[zeTable]zeChamp)
Si($L_indice < 0)
AJOUTER A TABLEAU(zeTab;[zeTable]zeChamp)
` Peut-être un tri ?
TRIER TABLEAU(zeTab)
`Aligner l'indice
$L_indice:=Chercher dans tableau(zeTab;[zeTable]zeChamp)
Fin de si
` Affichage
zeTab{0}:=zeTab{$L_indice}
Il y a d'autres finesses avec les combo-box, la lecture des manuels ne me semble pas être inutile, d'autant qu'ils sont très bien faits.
Par exemple, tu peux récupérer la valeur que l'utilisateur a mis dans l'élément 0, même si cette valeur n'existe pas dans le reste du tableau :
[zeTable]zeChamp:=zeTab{0}
A+
Thibaud
Partager