我原来写的,通过拖拽item,想放在那里就放在那里。lz能够把你实现的方法晒晒?procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);var SListItem: TListItem; AListItem: TListItem; tempint, i: integer; tempstr: string;begin//判断是否是Tlistview if (Source is TListView) and (Sender is TListView) then begin //得到被拖拽的item SListItem := Listview1.Selected; //得到目标item AListItem := ListView1.GetItemAt(x, y); //如果没有目标item,则目标item就是最后一个item if Alistitem = nil then alistitem := Listview1.Items.Item[listview1.Items.Count - 1];//更新 listview1.Items.BeginUpdate;//如果从后向前拖拽 if slistitem.Index > alistitem.Index then begin tempint := slistitem.ImageIndex; tempstr := slistitem.Caption; for i := slistitem.Index downto alistitem.Index + 1 do begin listview1.Items.Item.ImageIndex := listview1.Items.Item[i - 1].ImageIndex; listview1.Items.Item.Caption := listview1.Items.Item[i - 1].Caption; end; listview1.Items.Item[alistitem.Index].ImageIndex := tempint; listview1.Items.Item[alistitem.Index].Caption := tempstr; end;//如果从前向后拖拽 if slistitem.Index < alistitem.Index then begin tempint := slistitem.ImageIndex; tempstr := slistitem.Caption; for i := slistitem.Index to alistitem.Index - 1 do begin listview1.Items.Item.ImageIndex := listview1.Items.Item[i + 1].ImageIndex; listview1.Items.Item.Caption := listview1.Items.Item[i + 1].Caption; end; listview1.Items.Item[alistitem.Index].ImageIndex := tempint; listview1.Items.Item[alistitem.Index].Caption := tempstr; end;//如果在同一个item上拖拽,则什么都不作//结束更新 listview1.Items.EndUpdate; end;end;