Differenze tra le versioni di "Interscambiare la posizione del contenuto degli item di una ListBox mediante trascinamento con il mouse"
Da Gambas-it.org - Wikipedia.
(Una versione intermedia di uno stesso utente non è mostrata) | |||
Riga 38: | Riga 38: | ||
End | End | ||
− | Si potrebbe anche parzialmente usare il ''Drag&Drop'', modificando la routine "ListBox1_Drop()"con l'uso della funzione ''Swap'': | + | Si potrebbe anche parzialmente usare il ''Drag&Drop'', modificando la routine "ListBox1_Drop()" con l'uso della funzione ''Swap'': |
Public Sub ListBox1_Drop() | Public Sub ListBox1_Drop() | ||
Riga 58: | Riga 58: | ||
With ListBox1 | With ListBox1 | ||
If Not IsNull(.Tag) Then | If Not IsNull(.Tag) Then | ||
− | Swap ListBox1[.Tag].Text, ListBox1[ | + | Swap ListBox1[.Tag].Text, ListBox1[.Index].Text |
.Tag = Null | .Tag = Null | ||
Else | Else |
Versione attuale delle 21:14, 7 dic 2023
Per spostare il testo da una riga a un'altra mediante trascinamento con il mouse, vi sono almeno un paio di modalità.
Usare il Drag&Drop
Useremo in questo caso le risorse del Drag&Drop.
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
Senza utilizzare il Drag&Drop
Public Sub Form_Open() ListBox1.List = ["aaaa", "bbbb", "cccc", "dddd", "eeee"] End Public Sub ListBox1_MouseUp() With ListBox1 If Not IsNull(.Tag) Then Swap ListBox1[.Tag].Text, ListBox1[.Index].Text .Tag = Null Else .Tag = .Index Endif End With End
Note
[1] Vedere questa pagina: Individuare il numero d'indice della riga di una ListBox sulla quale si è cliccato con il mouse