Переупорядочение ListView Drag / Drop - не работает при перетаскивании влево - PullRequest
1 голос
/ 21 ноября 2011

Как заголовок на самом деле - у меня есть некоторый код для переупорядочивания некоторых миниатюр в ListView (формат представления «LargeIcon»), и он отлично работает при перетаскивании изображения вправо (то есть с большим индексом).Но при перетаскивании влево он вообще не работает.

Есть идеи?

  private void lstImages_ItemDrag(object sender, ItemDragEventArgs e)
    {
        lstImages.DoDragDrop(lstImages.SelectedItems, DragDropEffects.Move);
    }

    private void lstImages_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(typeof(ListView.SelectedListViewItemCollection)))
        {
            e.Effect = DragDropEffects.Move;
        }
    }

    private void lstImages_DragDrop(object sender, DragEventArgs e)
    {
        if (lstImages.SelectedItems.Count == 0) return;

        Point p = lstImages.PointToClient(new Point(e.X, e.Y));
        ListViewItem dragToItem = lstImages.GetItemAt(p.X, p.Y);

        if (dragToItem == null) return;

        int dragIndex = dragToItem.Index;

        ListViewItem dataItem = (e.Data.GetData(typeof(ListView.SelectedListViewItemCollection)) as ListView.SelectedListViewItemCollection)[0];
        int itemIndex = dragIndex;
        if (itemIndex == dataItem.Index) return;

        itemIndex = itemIndex + 1;

        ListViewItem insertItem = (ListViewItem)dataItem.Clone();
        lstImages.Items.Insert(itemIndex, insertItem);
        lstImages.Items.Remove(dataItem);
    }

1 Ответ

2 голосов
/ 21 ноября 2011

Я немного изменил ваш код, и теперь он работает.(Только часть _DragDrop).Кажется, есть ошибка, и ее можно исправить, изменив выравнивание во время Drag & Drop.

  listView1.Alignment = ListViewAlignment.Default;
  if (listView1.SelectedItems.Count == 0)
    return;
  Point p = listView1.PointToClient(new Point(e.X, e.Y));
  ListViewItem MovetoNewPosition = listView1.GetItemAt(p.X, p.Y);
  if (MovetoNewPosition == null) return;
  ListViewItem DropToNewPosition = (e.Data.GetData(typeof(ListView.SelectedListViewItemCollection)) as ListView.SelectedListViewItemCollection)[0];
  ListViewItem CloneToNew = (ListViewItem)DropToNewPosition.Clone();
  int index = MovetoNewPosition.Index;
  listView1.Items.Remove(DropToNewPosition);
  listView1.Items.Insert(index, CloneToNew);
  listView1.Alignment = ListViewAlignment.SnapToGrid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...