看看这个例子Option Explicit Private DragLV As ListItem Private Sub Form_Load() ListView1.OLEDragMode = ccOLEDragAutomatic ListView1.OLEDropMode = ccOLEDropManual Dim lst As ListItem Set lst = ListView1.ListItems.Add(1, "a1", "x") lst.SubItems(1) = "aaa" lst.SubItems(2) = "bbb" lst.SubItems(3) = "bbc" lst.SubItems(4) = "bbd" Set lst = ListView1.ListItems.Add(2, "a2", "y") lst.SubItems(1) = "bba" lst.SubItems(2) = "bbc" lst.SubItems(3) = "bbd" lst.SubItems(4) = "bbe" Set lst = ListView1.ListItems.Add(3, "a3", "z") lst.SubItems(1) = "bbc" lst.SubItems(2) = "bbe" lst.SubItems(3) = "bbf" lst.SubItems(4) = "bbg" End SubPrivate Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single) Dim hitlv As ListItem Dim newLv As ListItem Set hitlv = ListView1.HitTest(x, y)
If Not hitlv Is Nothing Then If hitlv.Index <> DragLV.Index Then Set newLv = ListView1.ListItems.Add(hitlv.Index, , DragLV.Text) newLv.SubItems(1) = DragLV.SubItems(1) newLv.SubItems(2) = DragLV.SubItems(2) newLv.SubItems(3) = DragLV.SubItems(3) newLv.SubItems(4) = DragLV.SubItems(4) newLv.Selected = True ListView1.ListItems.Remove DragLV.Index End If Else Set newLv = ListView1.ListItems.Add(, , DragLV.Text) newLv.SubItems(1) = DragLV.SubItems(1) newLv.SubItems(2) = DragLV.SubItems(2) newLv.SubItems(3) = DragLV.SubItems(3) newLv.SubItems(4) = DragLV.SubItems(4) newLv.Selected = True ListView1.ListItems.Remove DragLV.Index End If End SubPrivate Sub ListView1_OLEStartDrag(Data As MSComctlLib.DataObject, AllowedEffects As Long) Set DragLV = ListView1.SelectedItem End Sub
Private DragLV As ListItem
Private Sub Form_Load()
ListView1.OLEDragMode = ccOLEDragAutomatic
ListView1.OLEDropMode = ccOLEDropManual
Dim lst As ListItem
Set lst = ListView1.ListItems.Add(1, "a1", "x")
lst.SubItems(1) = "aaa"
lst.SubItems(2) = "bbb"
lst.SubItems(3) = "bbc"
lst.SubItems(4) = "bbd"
Set lst = ListView1.ListItems.Add(2, "a2", "y")
lst.SubItems(1) = "bba"
lst.SubItems(2) = "bbc"
lst.SubItems(3) = "bbd"
lst.SubItems(4) = "bbe"
Set lst = ListView1.ListItems.Add(3, "a3", "z")
lst.SubItems(1) = "bbc"
lst.SubItems(2) = "bbe"
lst.SubItems(3) = "bbf"
lst.SubItems(4) = "bbg"
End SubPrivate Sub ListView1_OLEDragDrop(Data As MSComctlLib.DataObject, Effect As Long, Button As Integer, Shift As Integer, x As Single, y As Single)
Dim hitlv As ListItem
Dim newLv As ListItem
Set hitlv = ListView1.HitTest(x, y)
If Not hitlv Is Nothing Then
If hitlv.Index <> DragLV.Index Then
Set newLv = ListView1.ListItems.Add(hitlv.Index, , DragLV.Text)
newLv.SubItems(1) = DragLV.SubItems(1)
newLv.SubItems(2) = DragLV.SubItems(2)
newLv.SubItems(3) = DragLV.SubItems(3)
newLv.SubItems(4) = DragLV.SubItems(4)
newLv.Selected = True
ListView1.ListItems.Remove DragLV.Index
End If
Else
Set newLv = ListView1.ListItems.Add(, , DragLV.Text)
newLv.SubItems(1) = DragLV.SubItems(1)
newLv.SubItems(2) = DragLV.SubItems(2)
newLv.SubItems(3) = DragLV.SubItems(3)
newLv.SubItems(4) = DragLV.SubItems(4)
newLv.Selected = True
ListView1.ListItems.Remove DragLV.Index
End If
End SubPrivate Sub ListView1_OLEStartDrag(Data As MSComctlLib.DataObject, AllowedEffects As Long)
Set DragLV = ListView1.SelectedItem
End Sub
http://blog.bossma.cn/winform/draglistview-implement-drag-rows-in-listview/完整例子,移动ListViewItem,拖动的时候还会出现一个位置线。