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...