Comunidad Gambas-es
Mover item de un listbox arrastrando con el Mouse - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Mover item de un listbox arrastrando con el Mouse (/thread-1567.html)

Páginas: 1 2


RE: Mover item de un listbox arrastrando con el Mouse - Shell - 14-12-2023

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

Realmente es que la idea del ejemplo solo parece pensado para lo que aparece en la lista. Pocos elementos.

Saludos