miércoles, 14 de marzo de 2012

Drag & Drop (Arrastrar y Soltar) entre dos listas en VB.NET

Ahora para terminar la entrega de los Drag & Drop, les voy a entregar un ejemplo sobre arrastrar y colocar entre dos listas.
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