martes, 3 de diciembre de 2013

DRAG & DROP


Nos sirve para arrastrar objetos de un lugar a otro en esta ocasión nos enfocaremos a arrastrar a través de dos listbox.

La interfaz de este es una parecida a la siguiente;










Dos listbox y un label, los dos listbox deben cambiarse la propiedad View a list, allowdrop a true.

Se utiliza el siguiente código:

Public Class frmDrag_Drop

    Private Sub ListView_ItemDrag(ByVal sender As Object, ByVal e As  _
System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag, _
ListView2.ItemDrag
        Dim myItem As ListViewItem
        Dim myItems(sender.SelectedItems.Count - 1) As ListViewItem
        Dim i As Integer = 0

        'Loop aunque la colección SelectedItems para la fuente.
        For Each myItem In sender.SelectedItems
            'Añadir el ListViewItem a la matriz de ListViewItems.
            myItems(i) = myItem
            i = i + 1
        Next
        'Crear un DataObject containg la matriz de ListViewItems.
        sender.DoDragDrop(New  _
        DataObject("System.Windows.Forms.ListViewItem()", myItems), _
        DragDropEffects.Move)
    End Sub

    Private Sub ListView_DragEnter(ByVal sender As Object, ByVal e As  _
    System.Windows.Forms.DragEventArgs) Handles ListView1.DragEnter, _
    ListView2.DragEnter
        'Comprobar si la matriz DataFormat ListViewItem personalizado.
        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 myItem As ListViewItem
        Dim myItems() As ListViewItem = e.Data.GetData("System.Windows.Forms.ListViewItem()")
        Dim i As Integer = 0

        For Each myItem In myItems
            'Agregar el artículo a la lista de objetivos.
            sender.Items.Add(myItems(i).Text)
            'Eliminar el elemento 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

Este es el link para descargar el programa ya funcional.

No hay comentarios:

Publicar un comentario