Reordenar Items de ListView Con arrastrar y soltar
Escrito en Enero 12, 2009 por Alex
El control ListView de Visual Basic.Net no tiene ningún método que nos ayude a reordenar los Items que no sea de una manera alfabética con solo arrastrar y soltar un elemento.
Necesitamos insertar el ListView que en este ejemplo lleva en su propiedad Name o Nombre: List1, la propiedad View la ponemos en Details, le agregamos una columna con el nombre que deseen y en el evento Load del formulario le agregamos algunos Items de prueba:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'Items de prueba Me.List1.Items.Add("Janet") Me.List1.Items.Add("Jose") Me.List1.Items.Add("Hugo") Me.List1.Items.Add("Luis") Me.List1.Items.Add("Alberto") Me.List1.Items.Add("Carlos") Me.List1.Items.Add("Jorge") Me.List1.Items.Add("isabel") Me.List1.Items.Add("karla") Me.List1.Items.Add("Gaby") End Sub
Para lograr ordenar los Items con el ratón, vamos a codificar tres de su eventos:
DragDrop: Evento que ocurre cuando se completa una operación de arrastrar y soltar.
DragEnter: Se produce cuando se arrastra un elemento en el área cliente.
ItemDrag: Se produce cuando el usuario comienza a arrastrar un elemento.
Dentro del evento DragEnter colocamos este código:
'cuando se arrastra un elemento al area cliente 'provocamos el efecto de moviemiento Dim i As Integer For i = 0 To e.Data.GetFormats().Length - 1 If e.Data.GetFormats()(i).Equals("System.Windows.Forms.ListView+SelectedListViewItemCollection") Then e.Effect = DragDropEffects.Move End If Next
Dentro del evento ItemDrag ponemos el código siguiente:
'Efecto movimiento con ayuda del evento DragEnter List1.DoDragDrop(List1.SelectedItems, DragDropEffects.Move)
Dentro del evento DragDrop metemos el siguiente código:
'Cuando se completa la operación de4 arrastrar y soltar 'Si los Items no estan seleccionados Sale del Sub If List1.SelectedItems.Count = 0 Then Exit Sub 'Tomamos la ubicación del puntero del ratón en el control. Dim p As Point = List1.PointToClient(New Point(e.X, e.Y)) 'Leemos el item donde se ubica el ratón Dim dragToItem As ListViewItem = List1.GetItemAt(p.X, p.Y) If dragToItem Is Nothing Then Return 'Tomamos el Index del Item y recorremos todos los items Dim dragIndex As Integer = dragToItem.Index Dim i As Integer Dim sel(List1.SelectedItems.Count) As ListViewItem For i = 0 To List1.SelectedItems.Count - 1 sel(i) = List1.SelectedItems.Item(i) Next For i = 0 To List1.SelectedItems.Count - 1 'Arrastramos a la ubicación de destino. Dim dragItem As ListViewItem = sel(i) Dim itemIndex As Integer = dragIndex If itemIndex = dragItem.Index Then Return If dragItem.Index < itemIndex Then itemIndex = itemIndex + 1 Else itemIndex = dragIndex + i End If 'Lo insertamos. Dim insertitem As ListViewItem = CType(dragItem.Clone, ListViewItem) List1.Items.Insert(itemIndex, insertitem) 'Borramos el Item de su ubicación original 'Lo movemos a su nueva ubicación. List1.Items.Remove(dragItem) Next 'Por ultimo refrecamos el List para reasignar indices List1.Refresh()
Generamos el proyecto y lo ejecutamos para ver resultados.
Si te gusto este artículo Suscribete a nuestro feed





