Salve a tutti
Da codice carico una ListView e ad ogni elemento, oltre la sua descrizione ho abbinato un Immagine
Visualizzo nella form la listview come LargeIcon
A questo punto abilito il AllowDrop e gestisco gli eventi per il trascinamento/spostamento degli Items
Problema riscontrato:
Ogni elemento che con il trascinamento del mouse vado a spostare si posiziona sempre in fondo alla ListView invece di assumere la posizione di dove è stato trascinato.
Faccio presente che:
- Ho verificato con il debug ed ho anche enumerato gli elementi e effettivamente lo spostamento aggiorna correttamente l'indice di ogni elemento, di quello spostato e di quelli successivi
- la ListView non è ordinata e la proprietà Sorting = None
Come refreshare la visualizzazione della ListView che tenga conto dello spostamento/trascinamento dei vari Items ?
// LISTVIEW ITEM DRAG
private void ListViewApp_ItemDrag(object sender, ItemDragEventArgs e)
{
// get the selected item for dragging
ListViewItem selectedItem = (ListViewItem)e.Item;
// start dragging the item
DoDragDrop(selectedItem, DragDropEffects.Move);
}
// LISTVIEW DRAG ENTER
private void ListViewApp_DragEnter(object sender, DragEventArgs e)
{
// checks whether the dragged data type is supported by the ListView
if (e.Data.GetDataPresent(typeof(ListViewItem)))
{ e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; }
}
// LISTVIEW DRAG DROP
private void ListViewApp_DragDrop(object sender, DragEventArgs e)
{
// retrieves the dragged item
var draggedItem = (ListViewItem)e.Data.GetData(typeof(ListViewItem));
// get the release coordinates
Point dropPosition = ListViewApp.PointToClient(new Point(e.X, e.Y));
// get the item where the label was dropped
ListViewItem dropItem = ListViewApp.GetItemAt(dropPosition.X, dropPosition.Y);
if (dropItem != null)
{
// remove the dragged item from its original position
ListViewApp.Items.Remove(draggedItem);
// get the index of the element where the label was dropped
int dropIndex = dropItem.Index;
// insert the dragged item into the new location
ListViewApp.Items.Insert(dropIndex, draggedItem);
}
}
Grazie per eventuali suggerimenti e info.
;-)