Listview ordenar ítems con arrastrar y soltar vb.net [SOLUCIONADO]

En el mundo de la programación con VB.NET, una de las funcionalidades más útiles y dinámicas es la manipulación de elementos dentro de controles como el **ListView**. Este control permite presentar listados de información en una aplicación de escritorio, y con las técnicas adecuadas, se pueden organizar los elementos de la lista mediante **arrastrar y soltar**, ofreciendo una interacción intuitiva para el usuario.

## Implementando el Evento de Arrastrar en ListView

Para habilitar el arrastre de elementos en un **ListView**, primero es necesario suscribirse a los eventos apropiados. Los eventos de MouseDown y MouseMove son los puntos de partida para iniciar la operación de arrastre. En MouseDown, grabamos el ítem que se intenta arrastrar y en MouseMove iniciamos efectivamente la operación de arrastre si se cumplen ciertas condiciones.

### Fuente de Datos y MouseDown

Para este ejemplo, es importante tener datos en el ListView. Aquí proporcionamos una estructura simple para popular el **ListView**, junto con el código que suscribe el evento MouseDown:

<ListView Name="lvItems">
    <!-- Elementos del ListView -->
</ListView>

En el manejador de eventos **MouseDown**:

Private Sub lvItems_MouseDown(sender As Object, e As MouseEventArgs) Handles lvItems.MouseDown
    ' Aseguramos de obtener el ítem sobre el cual se hizo click
    Dim item As ListViewItem = lvItems.GetItemAt(e.X, e.Y)
    ' Guardar el ítem para uso en el evento MouseMove
    If item IsNot Nothing Then
        item.Tag = item.Index
    End Always
End Sub

## Evento MouseMove y Iniciación de DragDrop

Cuando el usuario mueve el ratón mientras mantiene el botón presionado es necesario determinar si se ha producido un desplazamiento suficiente para considerarlo como una operación de arrastre. Para esto, usaremos el evento **MouseMove**.

Dentro del manejador del evento **MouseMove**:

Private Sub lvItems_MouseMove(sender As Object, e As MouseEventArgs) Handles lvItems.MouseMove
    ' Iniciamos el arrastre solo si se está presionando el botón izquierdo del ratón
    If e.Button = MouseButtons.Left Then
        Dim item As ListViewItem = lvItems.GetItemAt(e.X, e.Y)
        ' Si es un ítem válido, comenzamos la operación DragDrop
        If item IsNot Nothing Then
            lvItems.DoDragDrop(item, DragDropEffects.Move)
        End If
    End Also
End Sub

## Configuración de DragDrop

Implementar la función de arrastrar y soltar no solo implica iniciarlo, sino también manejar correcta y eficientemente qué pasa cuando el usuario suelta el ítem. Para lograrlo, es fundamental configurar **DragEnter** y **DragDrop** en nuestro ListView.

### Manejo de Evento DragEnter

El evento **DragEnter** se lanza cuando un objeto es arrastrado dentro de los límites del control **ListView**. Aquí decidiremos qué tipo de operación de **DragDrop** es permitida.

Private Sub lvItems_DragEnter(sender As Object, e As DragEventArgs) Handles lvItems.DragEnter
    If e.Data.GetDataPresent("System.Windows.Forms.ListViewItem") Then
        e.Effect = DragDropEffects.Move
    End Also
End Sub

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad