Bonjour,
Au lancement de mon application, un combo se remplit de valeurs dont l'affichage est utile à la compréhension de l'utilsateur (le nom d'un fichier par exemple).
Mon traitement, lui, n'a que faire de ce nom de fichier, mais désire connaître son chemin absolu ...
Comment faire, avec un Combo box, pour afficher une donnée dans un item, et en stocker une différente de manière invisible ?
A l'époque où je développais en Visual Basic, la propriété "value" d'un item complétait généreusement la propriété "text" ou "caption".
Peut-on en faire de même en AutoIt ?
En vous remerciant.
[R] Stocker une donnée pour chaque item d'un combo
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] Stocker une donnée pour chaque item d'un combo
Modifié en dernier par CleM71 le ven. 30 mai 2008 10:06, modifié 1 fois.
Re: [..] Stocker une donnée pour chaque item d'un combo
Bonjour,
Pas de solution à me proposer ?
Pas de solution à me proposer ?
Re: [..] Stocker une donnée pour chaque item d'un combo
La méthode simple qui me vient à l'esprit est de faire un tableau à 2 dimensions. Le nom dans la premiére colonne et le chemin dans l'autre.
Quand tu as besoins du chemin, tu récupères le nom dans le combobox et tu le cherches dans ton tableau pour avoir l'indice. Tu auras le chemin.
Il y a peut étre moyen de faire mieux mais c'est une méthode
Quand tu as besoins du chemin, tu récupères le nom dans le combobox et tu le cherches dans ton tableau pour avoir l'indice. Tu auras le chemin.
Il y a peut étre moyen de faire mieux mais c'est une méthode
Re: [..] Stocker une donnée pour chaque item d'un combo
Merci pour ta réponse.
C'est exactement ce sur quoi je me suis dirigé.
Pour récupérer l'index de l'élément sélectionné, il faut utiliser les librairies UDF des Combobox. J'ai donc migré vers ce composant, avec notamment le _GUICtrlComboboxEx_Create().
La méthode AddString est censée ajouter un élément au Combo box, et ce n'est pas le cas chez moi, du moins je ne le vois pas ! Le combo reste désespérément vide.
J'ai essayé même de copier / coller les scripts d'exemple fournis avec AutoIt. Si je l'exécute dans un nouveau programme, avec une GUI dédiée à ce test, ça marche. Dès que j'implémente la création d'items dans ma GUI, je ne vois rien dans le combo.
Inclusion du composant :
Création de la GUI :
Création du combo :
Pour stocker dans un tableau mon information, j'utilise une variable $i incrémentée à chaque ajout d'un item dans le combo.
Voici ma fonction récursive, qui doit ajouter un item dans le combo par fichier MSI trouvé à partir du répertoire avec lequel elle est lancée à l'origine :
Plus incroyable, si je fais
ça me renvoie bien l'index de l'item qui vient d'être ajouté !
Donc voilà, si vous avez des idées, je suis preneur
Merciii
C'est exactement ce sur quoi je me suis dirigé.
Pour récupérer l'index de l'élément sélectionné, il faut utiliser les librairies UDF des Combobox. J'ai donc migré vers ce composant, avec notamment le _GUICtrlComboboxEx_Create().
La méthode AddString est censée ajouter un élément au Combo box, et ce n'est pas le cas chez moi, du moins je ne le vois pas ! Le combo reste désespérément vide.
J'ai essayé même de copier / coller les scripts d'exemple fournis avec AutoIt. Si je l'exécute dans un nouveau programme, avec une GUI dédiée à ce test, ça marche. Dès que j'implémente la création d'items dans ma GUI, je ne vois rien dans le combo.
Inclusion du composant :
Code : Tout sélectionner
#Include <GuiComboBoxEx.au3>
Code : Tout sélectionner
$Win = GUICreate("ALIAS 1.0", 322, 526, 326, 197)
Code : Tout sélectionner
$LstMSI = _GUICtrlComboBoxEx_Create($Win, "", 7, 112, 305, 25)
Voici ma fonction récursive, qui doit ajouter un item dans le combo par fichier MSI trouvé à partir du répertoire avec lequel elle est lancée à l'origine :
Code : Tout sélectionner
Func ScanFolderForMSI($SourceFolder)
Local $Search
Local $File
Local $FileAttributes
Local $FullFilePath
$Search = FileFindFirstFile($SourceFolder & "\*.*")
While 1
If $Search = -1 Then
ExitLoop
EndIf
$File = FileFindNextFile($Search)
If @error Then ExitLoop
$FullFilePath = $SourceFolder & "\" & $File
$FileAttributes = FileGetAttrib($FullFilePath)
If StringInStr(StringRight ($File, 4), ".msi") Then
_GUICtrlComboBoxEx_AddString($LstMSI, $FullFilePath)
$i = $i + 1
$TabMSI[$i] = $FullFilePath
EndIf
If StringInStr($FileAttributes,"D") Then
ScanFolderForMSI($FullFilePath)
EndIf
WEnd
FileClose($Search)
EndFunc
Plus incroyable, si je fais
Code : Tout sélectionner
MsgBox(0, "", _GUICtrlComboBoxEx_AddString($LstMSI, $FullFilePath))
Donc voilà, si vous avez des idées, je suis preneur
Merciii
Re: [..] Stocker une donnée pour chaque item d'un combo
Résolu
La hauteur de mon combo (25) était insuffisante ...
La hauteur de mon combo (25) était insuffisante ...