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 SubEspero 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 seleccionaList1.Selected(j) = False List1.Selected(j - 1) = TrueY 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)