Récupérer une data ou mettre à jour une listbox? [Résolu]

Signaler
Messages postés
14
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2007
-
Messages postés
14
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2007
-
Voilà le prob..je suis sous VC++ 6

J'ai créé une listbox dans lequel j'ajoute bien des éléments..SendMessage(hdlist,LB_ADDSTRING,0,buff)

là pas de prob la listbox se met à jour..mais lorsque je veux récupérer le contenu avec SendMessage(hdlsit,LB_GETITEMDATA,numitem,0) je ne récupére rien...dasn la messagebox (pour moi il y a une erreur)

De même qd je veux mettre à jour la listbox je voudrais utiliser SENDMessage(hdlist,LB_SETITEMDATA,numitem,buff) au lieu de LB_DELETESTRING suivi LB_INSERSTRING ..mais la listbox ne se met pas à jour alors que la seconde solution oui mais elle n'est pas intéressante pour moi..

Je demande votre aide merci

4 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
dans une listbox (et d'autres controles de listes), chaque item à son texte (celui de LB_ADDSTRING) et 32 bits de données personnelles associées. ces 32 bits peuvent êtres des infos complémentaires sur l'item ou un pointeur vers une structure qui contient ces infos sup. Faire LB_GETITEMDATA ou LB_SETITEMDATA ne modifie en rien l'affichage de la listbox (le texte sera toujours le même), mais seulement les données internes. Si tu veux renommer un élément, il n'y a pas le choix (sauf erreur de ma part), il faut faire LB_DELETESTRING suivit de LB_INSERTSTRING.

Pour récupérer le texte d'un item c'est LB_GETTEXT
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
par exemple si ta listbox contient des noms de personnes et que pour chaque personne tu as une structure de données contenant des infos dessus (nom, adresse, ...). Pour accéder à ces infos à partir du nom sélectionné, tu peux sauvegarder des données dans un tableau et y accéder par l'indice dans la liste. Maintenant, si ta liste est triée ou que son contenu évolue, tu sera obligé de mettre à jour en permanence ton tableau pour refleter l'odre de la listbox.

La solution est alors d'associer un pointeur vers la structure à chaque item de la liste. Ainsi, lors de l'ajout d'un nom dans la liste, tu crée également une nouvelle structure que tu asocie par SETITEMDATA. Pour récupérer les infos, c'est GETITEMDATA. A tout momment tu auras tes infos à partir d'un indice dans la listbox.

// ajout :
MASTRUCT* mastruct = new MASTRUCT;
int index=SendMessage(hlst, CB_ADDSTRING, 0, (LPARAM)nom);
SendMessage(hlst, CB_SETITEMDATA, index, (LPARAM)mastruct);
Messages postés
14
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2007

Merci de ta réponse claire et précise..je vois mieux l'intéret maintenant
Messages postés
14
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2007

Merci de ta réponse..j'ai utilisé ta solution ca fonctionne parfaitement...mais pour précision intellectuelle dans quelle situation on utilise alors SETITEMDATA et GETITEMDATA..je vois pas bien l'intérêt