Verschieben inn ListCtrl

michaelwengert

Erfahrenes Mitglied
Ich habe eine ListCtrl in der Report-Ansicht.
Nun verschiebe ich durch drücken der Pfeiltasten markierte Elemente nach oben bzw nach unten.
Nun ist das Problem, das ja beim verschieben immer noch das zuvor markierte Element auch wieder markiert sein soll. Beim runterschieben funktioniert das auch, aber beim Hochschieben wird immer das Element, das eins tiefer ist markiert.

Mein Code ist folgendermaßen:

Code:
void CHardware::OnLvnKeydownObjectmemberlist(NMHDR *pNMHDR, LRESULT *pResult)
{
  LPNMLVKEYDOWN pLVKeyDow = reinterpret_cast<LPNMLVKEYDOWN (pNMHDR);
  if (pLVKeyDow->wVKey==VK_DOWN)
      OnBnClickedDown();
  else if (pLVKeyDow->wVKey==VK_UP)	
       OnBnClickedUp();		
*pResult = 0;
}

void CHardware::OnBnClickedUp()
{
CString	strID;					
CString        strHardware;				
CString	strValue;	
				
strID=m_Properties.GetItemText(s16Auswahl,0);
strHardware=m_Properties.GetItemText(s16Auswahl,1);
strValue=m_Properties.GetItemText(s16Auswahl,2);
if (s16Auswahl>0)
{
       m_Properties.DeleteItem(s16Auswahl);
     m_Properties.SetSelectionMark(s16Auswahl+1);
      s16Auswahl-=1;

     m_Properties.InsertItem(s16Auswahl,strID);
     m_Properties.SetItem(s16Auswahl,1,LVIF_TEXT,strHardware,0,0,0,0);
     m_Properties.SetItem(s16Auswahl,2,LVIF_TEXT,strValue,0,0,0,0);
}		
SetHardwarePosition();
}

void CHardware::OnBnClickedDown()
{
CString	strID;						
CString	strHardware;				
CString	strValue;					

strID=m_Properties.GetItemText(s16Auswahl,0);
strHardware=m_Properties.GetItemText(s16Auswahl,1);
strValue=m_Properties.GetItemText(s16Auswahl,2);
if (s16Auswahl<m_Properties.GetItemCount()-1)
{
     m_Properties.DeleteItem(s16Auswahl);
     s16Auswahl+=1;
     m_Properties.InsertItem(s16Auswahl,strID);
     m_Properties.SetItem(s16Auswahl,1,LVIF_TEXT,strHardware,0,0,0,0); 
     m_Properties.SetItem(s16Auswahl,2,LVIF_TEXT,strValue,0,0,0,0);
}
SetHardwarePosition();
}

Hat jemand ne Ahnung
 
Zuletzt bearbeitet:
Da musst du doch nur prüfen, ob die Änderung oberhalb oder unterhalb stattfindet, und dann ggf. 1 vom Itemindex abziehen, oder habe ich da was übersehen?
 

Neue Beiträge

Zurück