The ListView control doesn’t expose any property that lets you disable the dragging of its elements. To do so, you must trap the WM_NOTIFY message that the ListView control sends its parent form when the drag operation begins, and “eat” it. Using the MSGHOOK.DLL subclassing library it’s easy to accomplish it:
' REQUIRES THE MSGHOOK.DLL LIBRARYConst WM_NOTIFY = &H4EConst LVN_FIRST = -100&Const LVN_BEGINDRAG = (LVN_FIRST - 9)Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (dest As _ Any, source As Any, ByVal bytes As Long)Private Type NMHDR hwndFrom As Long idFrom As Long code As LongEnd TypeDim WithEvents FormHook As MsgHookPrivate Sub Form_Load() ' start subclassing the current form Set FormHook = New MsgHook FormHook.StartSubclass Me ' fill the ListView1 control with data ' ... (omitted) ...End Sub' this event fires when the form is sent a messagePrivate Sub FormHook_BeforeMessage(uMsg As Long, wParam As Long, lParam As Long, _ retValue As Long, Cancel As Boolean) ' the ListView might be notifying something to its parent form If uMsg = WM_NOTIFY Then ' copy the MNHDR structure pointed ' to by lParam to a local UDT Dim nmh As NMHDR CopyMemory nmh, ByVal lParam, Len(nmh) ' check whether the notification is from the ListView1 control ' and whether it's the beginning of a drag operation If nmh.hwndFrom = ListView1.hWnd And nmh.code = LVN_BEGINDRAG Then ' yes, cancel this operation retValue = 1 Cancel = True End If End IfEnd Sub