Ecco un semplice esempio facilmente adattabile ad una ListView. In un form ho caricato una Listbox e ho impostato per tale controllo la proprietà OLEDropMode = 1, quindi ho programmato questi eventi: OLEDragOver e OLEDragDrop. Il primo viene inviato durante il trascinamento del file sopra il listbox. Impostando la variabile Effect si agisce direttamente sulla icona visualizzata durante il trascinamento:
codice:
Private Sub List1_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, ...)
If Data.GetFormat(vbCFFiles) Then
'se si trascina uno o più file l'icona è a forma Copy
Effect = vbDropEffectCopy
Else
'se si trascina qualcosa di diverso da un file
'l'icona è a forma di divieto
Effect = vbDropEffectNone
End If
End Sub
Quando l'utente rilascia il file sopra la Listbox, viene inviato un evento OLEDragDrop. Nell'esempio seguente la procedura controlla la correttezza del dato ricevuto e lo aggiunge alla listbox. Notare che la proprietà Files è una collection, quindi può contenere più file:
codice:
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, ...)
Dim i As Integer
'se il formato dell'oggetto è un file o un insieme di files...
If Data.GetFormat(vbCFFiles) Then
'carica questi files nella listbox
For i = 1 To Data.Files.Count
List1.AddItem Data.Files(i)
Next
End If
End Sub