Perhaps something like this will work for you.
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With ListView1
.Alignment = ListViewAlignment.SnapToGrid
.AllowDrop = True
.AutoArrange = False
.Scrollable = False
.View = View.LargeIcon
End With
End Sub
Private Sub ListView1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag
Dim lvi As ListViewItem = CType(e.Item, ListViewItem)
ListView1.DoDragDrop(New DataObject("System.Windows.Forms.ListViewItem", lvi), DragDropEffects.Move)
End Sub
Private Sub ListView1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragEnter
If e.Data.GetDataPresent("System.Windows.Forms.ListViewItem") Then
e.Effect = DragDropEffects.Move
End If
End Sub
Private Sub ListView1_DragOver(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragOver
Dim lvi As ListViewItem = CType(e.Data.GetData("System.Windows.Forms.ListViewItem"), ListViewItem)
Dim Offset As Size = Size.Subtract(Cursor.Size, New Size(Cursor.HotSpot.X, Cursor.HotSpot.Y))
lvi.Position = Point.Subtract(ListView1.PointToClient(New Point(e.X, e.Y)), Offset)
e.Effect = DragDropEffects.Move
End Sub
End Class