CListCtrl:Nur die Hälfte wird gelöscht
-
Mit folgenden Code versuche ich die selektierten Einträge in einen Listctrl zu löschen.
void CAutoreaderDlg::OnPopupLschen() { if(MessageBox("Die gewählten Einträge löschen?","Auswahl Löschen",MB_YESNO)==IDYES) { CListCtrl l; CListCtrl * a; a = (CListCtrl *) l.FromHandle(active); POSITION c = a->GetFirstSelectedItemPosition(); while(c) { long item =a->GetNextSelectedItem(c); a->DeleteItem(item); } } }
Aber es werden nur die Hälfte der Einträge gelöscht.
[ Dieser Beitrag wurde am 30.01.2003 um 08:55 Uhr von Andorxor editiert. ]
-
Was ist das:
CListCtrl l;
CListCtrl * a;
a = (CListCtrll.FromHandle(active);
Und was ist 'active' ??
-
active ist die HWND eines CListctrl.Da ich mehrere Listen auf dem Formular habe,und ich in allen die selben Funktionen über das Popupmenü aufrufen möchte setze ich beim rechtklick auf die Liste active auf das jeweils gewählte Liste.
An diesen Bereich kann es eigentlich nicht liegen,da die Einträge ja in der richtigen Liste gelöscht werden.
-
Naja, logisch ...
Stell Dir ein Array vor, in dem alle selektierten Items liegen.
Sobald das 1. Item gelöscht wird, rutschen alle Elemente um 1 nach vorne, wodurch nur jedes 2. Element gelöscht wird
-
CListCtrl l;
CListCtrl * a;
a = (CListCtrll.FromHandle(active);
P.S. Warum speicherst Du nicht gleich den Zeiger auf CListCtrl als active, statt ein HWND zu nehmen?