Interscambiare la posizione del contenuto degli item di una ListBox mediante trascinamento con il mouse

Da Gambas-it.org - Wikipedia.

Useremo in questo caso le risorse del Drag&Drop per spostare il testo da una riga a un'altra mediante trascinamento con il mouse.

Mostriamo un esempio pratico:

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
' Preleva e trascina il testo individuando la riga che lo contiene:
   .Drag(ListBox1.Text, "text/html")
 End With

End 


Public Sub ListBox1_Drop()

 Dim b As Byte

' Individua il numero d'indice della riga, ove si deve rilasciare il testo prelevato dall'altra riga:
 b = Fix(Drag.Y / (ListBox1.ScrollH / ListBox1.Count)) [nota 1]

' Assegna alla riga del prelievo il testo contenuto nella riga del rilascio:
 ListBox1[ListBox1.Tag].Text = ListBox1[b].Text

' Rilascia nella riga il testo della riga del prelievo:
 ListBox1[b].Text = Drag.Data

End

Si potrebbe anche parzialmente usare il Drag&Drop, modificando la routine "ListBox1_Drop()"con l'uso della funzione Swap:

Public Sub ListBox1_Drop()

 Swap ListBox1[ListBox1.Tag].Text, ListBox1[Fix(Drag.Y / (ListBox1.ScrollH / ListBox1.Count))].Text

End


Note

[1] Vedere questa pagina: Individuare il numero d'indice della riga di una ListBox sulla quale si è cliccato con il mouse