Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1357 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [EVC++] Problème de récupération d'item dans une CtrlList

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[EVC++] Problème de récupération d'item dans une CtrlList

n°161161
raph77
Posté le 17-06-2002 à 17:10:50  profilanswer
 

J'ai une liste avec 3 colonnes. Je sais récupérer les évenements sur chacune des colonnes, mais sur les 2 dernières colonnes, je ne peux pas récupérer l'item (je récupère -1). Alors que ca marche parfaitement sur la première colonne...

mood
Publicité
Posté le 17-06-2002 à 17:10:50  profilanswer
 

n°161165
antp
Super Administrateur
Champion des excuses bidons
Posté le 17-06-2002 à 17:12:00  profilanswer
 

Quel est-ton code pour récupérer l'item ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°161184
raph77
Posté le 17-06-2002 à 17:19:04  profilanswer
 

Pour insérer les données :
 

Code :
  1. int nIndex = theCtrl.InsertItem(i++,donnee1); // j'insère un item  
  2. theCtrl.SetItemText(nIndex,1,donnee2); //2e colonne de la ligne  
  3. theCtrl.SetItemText(nIndex,2,donnee3); //3e colonne de la ligne  
  4. theCtrl.SetItemData(nIndex, (DWORD)pConsultant ); //faire correspondre une data à l'item


 
Pour récupérer :
 

Code :
  1. if( pNMLISTVIEW->iSubItem == 1)
  2. {
  3.  if( pNMLISTVIEW->iItem != -1 )
  4.  {
  5.   //2eme colonne de l'item cliqué
  6.   CConsultant* pConsultant = (CConsultant *)theCtrl.GetItemData(pNMLISTVIEW->iItem);
  7.  }
  8. }


Message édité par raph77 le 17-06-2002 à 17:19:29
n°161196
try58
Posté le 17-06-2002 à 17:32:29  profilanswer
 

C normal, ton test n'est pas bon :
if( pNMLISTVIEW->iSubItem == 1)
{
 
}
 
comme tu as plus d'une colonne, iSubItem ne sera pas egale a 1!

n°161218
raph77
Posté le 17-06-2002 à 17:46:15  profilanswer
 

Ben iSubItem correspond au numéro de la colonne (0, 1, 2), puisque si je met un truc du style :
 

Code :
  1. if( pNMLISTVIEW->iSubItem == 0) {
  2. AfxMessageBox(_T("colonne 0" ));
  3. }
  4. if( pNMLISTVIEW->iSubItem == 1) {
  5. AfxMessageBox(_T("colonne 1" ));
  6. }
  7. if( pNMLISTVIEW->iSubItem == 2) {
  8. AfxMessageBox(_T("colonne 2" ));
  9. }


 
J'obtiens bien les bons numéros de colonne.

n°161227
try58
Posté le 17-06-2002 à 18:01:32  profilanswer
 

Il y a un truc qui me parait bizarre dans ton code.
moi j'aurai mis

Code :
  1. int nIndex = theCtrl.InsertItem(nIndex, donnee1); // j'insère un item   
  2. theCtrl.SetItemText(nIndex,1,donnee2); //2e colonne de la ligne   
  3. theCtrl.SetItemText(nIndex,2,donnee3); //3e colonne de la ligne   
  4. theCtrl.SetItemData(nIndex, (DWORD)pConsultant ); //faire correspondre une data à l'item

 
[cpp]  
 
Comme tu as fais, je pense que les colonnes 2 et 3 vont etre decalees d'une ligne par rapport a la colonne 1.

n°161564
raph77
Posté le 18-06-2002 à 10:57:48  profilanswer
 

try58, j'ai essayé ton code, mais toujours la même chose, je récupère l'item uniquement sur la première colonne. Pour les autres colonnes je récupère bien dans iSubItem le num de la colonne.
 
Help :cry:

n°161583
try58
Posté le 18-06-2002 à 11:09:35  profilanswer
 

raph77 a écrit a écrit :

try58, j'ai essayé ton code, mais toujours la même chose, je récupère l'item uniquement sur la première colonne. Pour les autres colonnes je récupère bien dans iSubItem le num de la colonne.
 
Help :cry:  




Montre le code de toute ta fonction qui te permet de remplir ta CListCtrl. Je pense que c'est a ce niveau qu'il y a un pb.

n°161586
raph77
Posté le 18-06-2002 à 11:12:02  profilanswer
 

Code :
  1. CManagerDoc* pDoc = (CManagerDoc *)GetDocument();
  2. CListCtrl& theCtrl = GetListCtrl();
  3. int i = 0;
  4. int nIndex = 0;
  5. UpdateColonne();
  6. theCtrl.DeleteAllItems();
  7. pDoc->beginConsultant(pListe);
  8. if( pDoc != NULL ) {
  9.  // On commence le parcours de la liste
  10.  while( pDoc->hasConsultant() ) {
  11.   CConsultant* pConsultant = pDoc->getNextConsultant(pListe);
  12. //   int nIndex = theCtrl.InsertItem(i++,pConsultant->getNomItem() );
  13.   nIndex = theCtrl.InsertItem(nIndex,pConsultant->GetCVName() );
  14.   theCtrl.SetItemText(nIndex,2,GetInfoCons(pConsu
  15. ltant));
  16.   theCtrl.SetItemText(nIndex,1,pConsultant->getNo
  17. mItem());
  18.   theCtrl.SetItemData(nIndex, (DWORD)pConsultant );
  19.  }
  20. }


 
Ca doit etre plus ou moins ça ;)

n°161590
raph77
Posté le 18-06-2002 à 11:17:59  profilanswer
 

Code :
  1. theCtrl.SetItemData(nIndex, (DWORD)pConsultant );


 
A quoi sert cette ligne de code ? C'est bien pour assigner la data à l'item (à la ligne en fait) ?

mood
Publicité
Posté le 18-06-2002 à 11:17:59  profilanswer
 

n°161612
try58
Posté le 18-06-2002 à 11:33:03  profilanswer
 

raph77 a écrit a écrit :

Code :
  1. theCtrl.SetItemData(nIndex, (DWORD)pConsultant );


 
A quoi sert cette ligne de code ? C'est bien pour assigner la data à l'item (à la ligne en fait) ?  




Tout a fait, ca permet de remplir ta CListCtrl avec des donnees (par exemple la valeur d'une variable) et non pas du texte.

n°161623
raph77
Posté le 18-06-2002 à 11:42:58  profilanswer
 

C'est bien ce que je cherche à faire, avoir un pointeur sur une structure pour pouvoir accès à toutes les infos sur un item.
Pourquoi cela ne marche-t'il pas alors ?? :pt1cable:

n°161642
try58
Posté le 18-06-2002 à 12:00:32  profilanswer
 

try58 a écrit a écrit :

 
Tout a fait, ca permet de remplir ta CListCtrl avec des donnees (par exemple la valeur d'une variable) et non pas du texte.  




 
Je me suis plante, ca ne sert pas a remplir la CListCtrl comme je le croyais!!

n°161649
try58
Posté le 18-06-2002 à 12:06:13  profilanswer
 

Est ce que ca te pose un probleme si quand tu cliques sur n'importe quelle colonne d'un item, tout la ligne est selectionnee?
Parce que tu peux utiliser ceci :
taliste.SetExtendedSytle(LVS_SELECTROW);
et je pense que tu recuperera la bonne data concernant ton item

n°161656
raph77
Posté le 18-06-2002 à 12:11:53  profilanswer
 

Le problème c'est que dans ce cas, je ne peux pas effectuer un code différent selon la colonne cliquée non ?

n°161665
try58
Posté le 18-06-2002 à 12:16:59  profilanswer
 

raph77 a écrit a écrit :

Le problème c'est que dans ce cas, je ne peux pas effectuer un code différent selon la colonne cliquée non ?  




SetItemData affecte une data pour toute la ligne. Donc avec GetItemData tu recupere la data de la ligne quel que soit la colonne cliquee!

n°161667
raph77
Posté le 18-06-2002 à 12:18:46  profilanswer
 

Ah ok, mais dans ce cas là, les colonnes sont toujours distinctes ?
 
Je vais essayer ca tout de suite :)

n°161678
try58
Posté le 18-06-2002 à 12:31:58  profilanswer
 

Essaie d'utiliser GetItem() au lieu de GetItemData(), peut etre que ca te permettra de recuperer les infos concernant le subitem selectionne.

n°161682
raph77
Posté le 18-06-2002 à 12:37:21  profilanswer
 

try58 a écrit a écrit :

Est ce que ca te pose un probleme si quand tu cliques sur n'importe quelle colonne d'un item, tout la ligne est selectionnee?
Parce que tu peux utiliser ceci :
taliste.SetExtendedSytle(LVS_SELECTROW);
et je pense que tu recuperera la bonne data concernant ton item  




 
Arf, il ne connait pas LVS_SELECTROW
Ou je peux avoir la liste de ce genre de parametres ?

n°161684
raph77
Posté le 18-06-2002 à 12:38:52  profilanswer
 

try58 a écrit a écrit :

Essaie d'utiliser GetItem() au lieu de GetItemData(), peut etre que ca te permettra de recuperer les infos concernant le subitem selectionne.  




 
Le problème se situe avant, puisque sur mon pNMLISTVIEW->iItem, j'ai -1 sauf dans la première colonne.

n°161687
try58
Posté le 18-06-2002 à 12:44:23  profilanswer
 

raph77 a écrit a écrit :

 
 
Le problème se situe avant, puisque sur mon pNMLISTVIEW->iItem, j'ai -1 sauf dans la première colonne.  




Ta CListCtrl se remplit elle correctement ?

n°161689
raph77
Posté le 18-06-2002 à 12:46:37  profilanswer
 

Euh oui, visuellement elle est correcte !

n°161690
try58
Posté le 18-06-2002 à 12:48:39  profilanswer
 

raph77 a écrit a écrit :

 
 
Arf, il ne connait pas LVS_SELECTROW
Ou je peux avoir la liste de ce genre de parametres ?  




je me suis plante c'est LVS_EX_FULLROWSELECT sinon le lien c'est
http://msdn.microsoft.com/library/ [...] styles.asp

n°161693
raph77
Posté le 18-06-2002 à 12:55:47  profilanswer
 

Ah ok, effectivement cela fonctionne maintenant !!!
Merci beaucoup :jap:  :jap:

n°161695
try58
Posté le 18-06-2002 à 13:03:12  profilanswer
 

de rien  [:milka]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [EVC++] Problème de récupération d'item dans une CtrlList

 

Sujets relatifs
probleme avec SDL en Crecupération des n premiers caracteres d'une variable
probleme dans la conception d'une interface graphiqueHtml+Js petit problème tt con d'ouverture de fichier html
Probleme de compilation avec les templates[ PHP ] Probleme pour systeme de News (DATE)
Problème de java sur un page html.... et j'ai rien fait de mal !!Problème de java sur un page html....
Probleme MySQL & PHP[Pop-up] Nouveau problème, voir en bas !
Plus de sujets relatifs à : [EVC++] Problème de récupération d'item dans une CtrlList


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR