Páginas (2): 1 2   
playmepe   07-12-2023, 21:46
#1
Buen día a todos, en esta oportunidad recurro a Uds. para consultar lo siguiente; quisiera ordenar los archivos de un listbox con arrastrar y soltar con el mouse (así como drag & drop) pero en el mismo listbox, ya que así es más facil en mover el archivo seleccionado en el index que uno desea. Gracias de antemano a sus respuestas.
Shell   07-12-2023, 22:44
#2
playmepe:

¿ Sabes que el listbox se puede ordenar automáticamente ?.  Pero no sé si eso te interesa.

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   07-12-2023, 23:36
#3
(07-12-2023, 21:46)playmepe escribió: quisiera ordenar los archivos de un listbox con arrastrar y soltar con el mouse (así como drag & drop) pero en el mismo listbox, ya que así es más facil en mover el archivo seleccionado en el index que uno desea.

Un desafío muy interesante !

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Shell   08-12-2023, 00:16
#4
No hago uso de DragDrop, simplemente selecciono uno y luego el otro, luego estos dos item se intercambia. Smile

Código:
Private vip_linux As New String[]
Private cuentaindices As Integer = 0
Private primero As Integer = -1
Private segundo As Integer = -1

Public Sub Form_Open()

  vip_linux = ["Linux Torvalds",
    "Richard Stallman",
    "Andrew Morton",
    "Eric S Raymond",
    "Andrew Tridgell",
    "Mark Shuttleworth",
    "Marc Ewing",
    "Miguel de Icaza",
    "Michael Widenius",
    "Rasmus Lerdof"]

  ListBox1.List = vip_linux

End

Public Sub ListBox1_Select()

  If cuentaindices < 2 And primero = -1 Then
    primero = ListBox1.Index
    Inc cuentaindices
  Else If cuentaindices = 1 And segundo = -1 Then
    segundo = ListBox1.Index
    Inc cuentaindices
    Swap ListBox1[primero].Text, ListBox1[segundo].Text
    primero = -1
    segundo = -1
    cuentaindices = 0
  Endif

End

Saludos
Archivos adjuntos
.gz
IntercambiarindicesListBox-0.0.1.tar.gz (Tamaño: 11.99 KB Descargas: 2)

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   08-12-2023, 02:06
#5
...si quisiera utilizar los recursos del "Drag&Drop", propondría este código:
Código:
Public Sub Form_Open()

  With ListBox1
    .Drop = True
    .List = ["aaaa", "bbbb", "cccc", "dddd", "eeee"]
  End With

End

Public Sub ListBox1_MouseDrag()
  
  With ListBox1
    .Tag = .Index
' Coge y arrastra el texto localizando la línea que lo contiene:
    .Drag(ListBox1.Text, "text/html")
  End With

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

Si, pero, no te gusta el Drag&Drop, propondría este código:
Código:
Public Sub Form_Open()

  ListBox1.List = ["aaaa", "bbbb", "cccc", "dddd", "eeee"]

End

Public Sub ListBox1_MouseUp()
 
  With ListBox1
    If Not IsNull(.Tag) Then 
'...Consul romano-gauditano, Shell, me dió la idea:
      Swap ListBox1[.Tag].Text, ListBox1[.Index].Text
      .Tag = Null
    Else
      .Tag = .Index
    Endif
  End With
 
End
Última modificación: 08-12-2023, 05:11 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
playmepe   08-12-2023, 05:01
#6
Gracias por sus respuestas, pero lo que quiero es manualmente ordenar la lista a mi gusto, no autómático, ni reemplazar. voy a tratar de jugar con sus ejemplos, a ver si me surge alguna idea. saludos
vuott   08-12-2023, 05:12
#7
¿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
Última modificación: 08-12-2023, 06:25 por vuott.

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
playmepe   10-12-2023, 00:18
#8
Gracias voutt por su código, esa si me sirve. Gracias
Shell   11-12-2023, 15:15
#9
Puede que la operación del Drag Drop no este "del todo" contemplada para realizarse sobre el mismo control.
En realidad no es algo raro de ver. Se suele hacer más entre dos controles.
 
(08-12-2023, 05:12)vuott escribió: n = Fix(Drag.Y / (ListBox1.ScrollH / ListBox1.Count))

Es algo rebuscada. Debería existir un método para esto. Es como si fuesen operaciones de dibujo.

Tengo pendiente leer por completo el post en la lista internacional sobre que no funciona el evento Mouse_Down() en Listbox.

Saludos

"El conocimiento es la mejor inversión que se puede hacer" - Abraham Lincoln
vuott   11-12-2023, 16:02
#10
(11-12-2023, 15:15)Shell escribió: en la lista internacional sobre que no funciona el evento Mouse_Down() en Listbox.

Sobre ese tema corremos... un piadoso velo.
Bah....

« Los horizontes perdidos nunca regresan. » (F. Battiato, 1983)

« Las ondas nunca regresan. » (Genesis: Ripples, 1976)

« Vita non suavis esse potest, nec Mors amara. »  (...vuott)
Páginas (2): 1 2   
  
Usuarios navegando en este tema: 2 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.