ComboBox

kuiu Messages postés 19 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 9 avril 2006 - 2 avril 2006 à 16:20
kuiu Messages postés 19 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 9 avril 2006 - 9 avril 2006 à 16:27
J´ai un ComboBox ou un ListBox par exemple de cinq lignes.
Je rempli les lignes a partir de données issues de TextBox avec Additem.
En même temps ces données des TextBox concaténées ( ....&.....&....) sont mises en mémoire dans un fichier correspondant a la ligne.
Open...... For Output....
J´ai un fichier par ligne.
La ligne 1 est donc dans le fichier .....A
La ligne 2 dans le fichier.......B
et ainsi de suite.
Selectionant une ligne du ComboBox je lis les données qui ont été enregistrées.
Par exemple la ligne 3 me renvoie dans mes TexBox les données du fichier C.
Open..... for Input.....
Tout cela fonctionne très bien.
J´élimine par exemple la ligne 3 avec Removeitem et j´efface les données enregistrées dans le fichier C correspondant.
il ne me reste plus que les lignes 1, 2, 4 et5.
Je lis les données des lignes 1 et 2 dans les TextBox et elles sont correctes.
Par contre les lignes 4 et 5 sont décalées car ListIndex qui allait de 0 a 4, ligne 1 a 5
a Changé et je lis donc des données erronées.
Comment proceder pour, après avoir éliminé une ou plusieurs lignes, arriver a lire le contenu correct des lignes qui n´ont pas été effacées mais dont l´ordre s´est déplacé dans le combox par rapport aux fichiers ou ces données ont été enregistrées ?
Meci pour les sugestions.

3 réponses

mcs2006 Messages postés 58 Date d'inscription dimanche 19 mars 2006 Statut Membre Dernière intervention 1 mai 2006
2 avril 2006 à 18:40
Bonjour,

Pour résumer, l'index de tes lignes dans la combobox ou la listbox ne correspond plus au réel numéro de ligne dans le fichier ?

Regarde alors la propriété itemdata. Un petit exemple que je te laisse adapter à tes fichiers texte :

Do While Not rst.EOF
With .MaCombo
.AddItem rst!LIBELLE
.ItemData(.ListCount - 1) = rst!ID 'ou n° de la ligne dans le texte
End With
rst.MoveNext
Loop

Pour retrouver,
sur le clic :
MaCombo.ItemData(MaCombo.ListIndex)
sinon :
for i = 0 to MaCombo.ListCount - 1
msgbox MaCombo.ItemData(i)
next

Etc...
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 avril 2006 à 18:49
Salut
Donc, tu t'aperçois que gérer cela avec des Index n'est pas possible.
Tu dois abandonner l'association directe ListIndex - fichier :
En même temps que tu insères tes données dans ta ComboBox, tu renseignes aussi un tableau de données :
Public Références() As String
Quand tu insères une donnée dans ton ComboBox :
Combo.AddItem maTextBox.Text
Redim Preserve Références(Combo.ListCount - 1) ' La liste dans le Combo commence à l'index 0
Références(Combo.ListCount - 1) = "Nom du fichier associé.txt"
Tu as ainsi un tableau dont les index sont les mêmes que ceux du Combo
Quand tu détruis un Item dans le Combo, il faut aussi supprimer celle du tableau :
Combo.RemoveItem NoChoisi
' Décalage des données
For r = UBound(Références) To (NoChoisi + 1)
Références(r - 1) = Références(r)
Next r
' Remet le même nombre de données dans le tableau
Redim Preserve Préférences(Combo.ListCount - 1)
Quand tu veux connaitre le nom du fichier correspondant à l'index choisi dans ton Combo :
Fichier = Références(Combo.SelectedItem)

Il y a aussi une bonne technique qui consiste à oublier le ComboBox et d'utiliser à la place une ListView.
(C'est le composant qui est utilisé dans l'explorateur de fichier avec affichage détail, list, petites icones, grosses icones)
Ce composant est un peu plus lourd à manipuler, mais il offre des avantages :
- même si tu ne mets qu'une colonne dedans, tu peux en déclarer une seconde mais ne pas l'afficher (ou la sortir de l'écran)
Tu pourrais donc stocker le chemin et nom du fichier sur la même ligne -> Ils s'effaceront en même temps
- Chaque ligne d'une ListView possède une propriété Tag (qui ne sert à rien) dans laquelle tu peux aussi stocker cette donnée.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro
0
kuiu Messages postés 19 Date d'inscription vendredi 24 octobre 2003 Statut Membre Dernière intervention 9 avril 2006
9 avril 2006 à 16:27
Je vous remercie pour vos réponses et je m´excuse pour le retard dans ma contestation mais mon ordinateur est en panne.
Il faut que je remplace mon" HD , disque rigide" ce qui me fera perdre pas mal de choses.
Je pense utiliser d´ici quelques jours la réponse de Jack qui me semble ouvrir un éventail plus grand de possibilités.
Excusez mon mauvais Français .
Ma boule de crystal s´est allumée!
0
Rejoignez-nous