Bonjour,
je souhaiterai savoir comment faire pour déplacer une ligne dans une CListCtrl,
par exemple avec des bouton style "move up", "move down"?
merci!
Version imprimable
Bonjour,
je souhaiterai savoir comment faire pour déplacer une ligne dans une CListCtrl,
par exemple avec des bouton style "move up", "move down"?
merci!
salut,
tu commences par recuperer les infos de la ligne en question (GetItemText).
tu la supprimes : DeleteItem.
tu inseres la ligne à l'ofset initial-1 : InsertItem.
un truc comme ça:
A tester ,je n'ai pas verifié ..., notamment au niveau du calcul du nouvel index ça peut -2:2 ...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 void MoveListCtrlLig(int nIndex,bool bUp) { int nCount = m_MyListCtrl.GetItemCount(); CStringArray strArray; int i=0; for (i=0;i < nCount;i++) { strArray.Add(m_MyListCtrl.GetItemText(nIndex,i)); } m_MyListCtrl.DeleteItem(nIndex); int nNewIndex=nIndex+(bUp?-1:1); m_MyListCtrl.Insertitem(LVIF_TEXT,nNewIndex , strArray[0], 0, 0,0, 0); for (i=1;i <nCount;i++) { m_MyListCtrl->SetItemText(nNewIndex,i, strArray[i]); } }
:D
Merci, ca a l'air bien ce que tu me propose, mais... en fait, je travaille sur une ligne sélectionnée par l'utilisateur, et le problème que je rencontre maintenant, c'est qu' au moment de l'appui sur le bouton Up, par exemple, la ligne perd sa sélection et GetHotItem() me renvoie -1...
Y a t'il un moyen de garder la sélection de la ligne, ou faut il que je me débrouille pour garder en mémoire la dernière ligne sélectionnée (solution que je ne trouve pas vraiment top...)
merci! :)
salut,
tu peux recuperer la ligne selectionnée avant d'appeler la fonction:
:DCode:
1
2
3
4
5
6
7
8 int nItem=-1; POSITION pos = m_MyListCtrl.GetFirstSelectedItemPosition(); if (pos! NULL) { nItem= m_MyListCtrl.GetNextSelectedItem(pos); MoveListCtrlLig(nItem,true); }
Merci beaucoup, ca marche nickel !! :P