Para esto necesitamos 2 controles Listview, dejar sus propiedades AllowDrop en True, MultiSelect a True y View a List.
Escribimos el siguiente código:
Private Sub ListView_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag, ListView2.ItemDrag
Dim objItem As ListViewItem
'Creamos un array de ListViewItem
Dim objItems(sender.SelectedItems.Count - 1) As ListViewItem
Dim i As Integer = 0
'Recorremos los items seleccionados y los agreagamos a nuestro array
For Each objItem In sender.SelectedItems
'aqui los vamos agregando
objItems(i) = objItem
i = i + 1
Next
'Creamos un DataObject que contendrá el array
sender.DoDragDrop(New _
DataObject("System.Windows.Forms.ListViewItem()", objItems), _
DragDropEffects.Move)
End Sub
Private Sub ListView_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragEnter, ListView2.DragEnter
'Verificamos el formato de la data del array
If e.Data.GetDataPresent("System.Windows.Forms.ListViewItem()") Then
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub ListView_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles ListView1.DragDrop, ListView2.DragDrop
Dim objItem As ListViewItem
Dim objItems() As ListViewItem = e.Data.GetData("System.Windows.Forms.ListViewItem()")
Dim i As Integer = 0
For Each objItem In objItems
'Agregamos el item a la lista.
sender.Items.Add(objItems(i).Text)
'Borramos el item de la lista de origen.
If sender Is ListView1 Then
ListView2.Items.Remove(ListView2.SelectedItems.Item(0))
Else
ListView1.Items.Remove(ListView1.SelectedItems.Item(0))
End If
i = i + 1
Next
End Sub
Private Sub frmListToList_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 1 To 9
ListView1.Items.Add("Texto " & i)
Next
End Sub
De esta forma entonces podremos arrastrar elementos de una lista a otra.
No hay comentarios:
Publicar un comentario