ListView visualizzazione dopo trascinamento [RISOLTO]

di il
1 risposte

ListView visualizzazione dopo trascinamento [RISOLTO]

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.
;-)

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte