Ejemplos en Visual Basic

Mover (desplazar) los elementos de un ListBox

 

Fecha: 17/May/1998


En este ejemplo veremos cómo mover (arriba y abajo) los elementos de un listbox.
Para el ejemplo necesitarás un form en el que haya un listbox (List1) y un array con dos botones (cmdMover())

Cuando se pulse en el primer botón (índice cero), se desplazará el elemento seleccionado hacia arriba y si se pulsa en el otro, el desplazamiento se hará hacia abajo.

Vamos a ver el aspecto del form de prueba:

Este es el código que se usa para desplazar los elementos, si quieres puedes descargar el ejemplo completo pulsando en el link que hay al final de la página.

Private Sub cmdMover_Click(Index As Integer)
    'Acción con los botones
    Dim j As Long
    Dim sTmp As String
    
    j = List1.ListCount - 1
    'Si no hay elementos en la lista, salir
    'Corregido, antes ponía If j = 0 y no era correcto
    If j < 0 Then Exit Sub
    'El elemento seleccionado
    j = List1.ListIndex
    'Si no hay elementos seleccionados, se usará el primero
    If j < 0 Then j = 0
    
    Select Case Index
    Case 0 'Subir
        'Si es el primero, nada que hacer
        If j = 0 Then Exit Sub
        
        'Intercambiar los elementos
        sTmp = List1.List(j)
        List1.List(j) = List1.List(j - 1)
        List1.List(j - 1) = sTmp
        
        'marcar el nuevo elemento seleccionado
        List1.ListIndex = j - 1
    Case 1 'Bajar
        'Si es el último, nada que hacer
        If j = List1.ListCount - 1 Then Exit Sub
        
        'intercambiar los elementos
        sTmp = List1.List(j)
        List1.List(j) = List1.List(j + 1)
        List1.List(j + 1) = sTmp
        
        'marcar el nuevo elemento
        List1.ListIndex = j + 1
    End Select
End Sub

Espero que este sencillo truco te sirva para dar más funcionalidad a tus listbox.

NOTA 19-May-98: Gracias a Alvaro Manera por indicarme esto que te pongo a continuación y un "fallillo" a la hora de comprobar si no hay elementos, este último detalle está corregido en el listado anterior.

Si usas un ListBox con la propiedad MultiSelect distinta de cero, tendrás que quitar/poner el elemento seleccionado, para que se "desplace" visualmente...
Añade esta línea antes del List1.ListIndex = j - 1, incluso puedes quitar esta línea aunque el ListBox no sea MultiSelect, ya que de esta forma también se selecciona

        List1.Selected(j) = False
        List1.Selected(j - 1) = True

Y dónde está List1.ListIndex = j + 1, añade estas otras, por supuesto que esto también puedes quitarlo y dejar sólo las nuevas líneas que te muestro a continuación:

        List1.Selected(j) = False
        List1.Selected(j + 1) = True


Si quieres ver los listados para probar esto, pulsa en este link (lst_mover.zip 1.58 KB)

la Luna del Guille o... el Guille que está en la Luna... tanto monta...