(08-12-2023, 05:12)vuott escribió: ¿Quizá quieres conseguir un resultado como éste?
Código:
Public Sub Form_Open()
With ListBox1
.Drop = True
.List = ["aaaa", "bbbb", "cccc", "dddd", "eeee"]
End With
End
Public Sub ListBox1_MouseDrag()
ListBox1.Drag(ListBox1.Text, "text/html")
End
Public Sub ListBox1_Drop()
Dim n, c As Byte
Dim ss As String[]
n = Fix(Drag.Y / (ListBox1.ScrollH / ListBox1.Count))
ss = ListBox1.List
ss.Add(Drag.Data, n)
c = ListBox1.Index
If ListBox1.Index > n Then c = ListBox1.Index + 1
ss.Remove(c, 1)
ListBox1.List = ss
End
Vuott ese código no funciona ó por lo menos no hace lo mismo que los anteriores.
Intenta con ese código mover el primer elemento sobre el segundo. No se mueve, no hay intercambio.
Puedes también mover el primero sobre el último elemento.
Se queda anterior al último, no en el último lugar y tampoco hay intercambio.
Los anteriores códigos si funciona.
Y esto tampoco funcionaría. Imagina que quieres añadir más elemento que sobresalen de los que muestra el listbox con su tamaño.
Código:
Public Sub Form_Open()
For i As Byte = 1 To 2
For j As Byte = Asc("A") To Asc("Z")
ListBox1.Add(Chr(j) & Str(i))
Next
Next
End
Public Sub ListBox1_MouseDrag()
If Mouse.Left Then
With ListBox1
.tag = .Index
.Drag(ListBox1.text, "text/html")
End With
Endif
End
Public Sub ListBox1_Drop()
Dim n As Byte
' Localiza el número de índice de la línea donde se va a liberar el texto tomado de la otra línea:
n = Fix(Drag.Y / (ListBox1.ScrollH / ListBox1.Count))
' Asigna el texto contenido en la línea de liberación a la línea de recogida:
ListBox1[ListBox1.Tag].Text = ListBox1[n].Text
' Suelta el texto de la frase de recogida:
ListBox1[n].Text = Drag.Data
End
Malum lectio.
Realmente es que la idea del ejemplo solo parece pensado para lo que aparece en la lista. Pocos elementos.
Saludos