C # Перетаскивание между ListViews - PullRequest
1 голос
/ 02 ноября 2010

Я пытаюсь создать автономный элемент управления Winforms под названием DragDropListView. Это происходит от ListView.

У меня есть код, который позволяет пользователю сортировать элементы списка в элементе управления, перетаскивая элементы в новом месте. Я добился этого путем переопределения OnDragDrop, OnDragOver, OnDragEnter, OnItemDrag.

У меня проблема с перетаскиванием из одного списка в совершенно другой. Событие запускается в другом представлении списка, как и ожидалось, но метод не принимает аргумент «отправитель», поэтому нет хорошего способа определить, откуда перетаскиваются элементы, и я никак не могу понять, как на самом деле получить предметы перетаскиваются. Текущий код работает с такими вещами, как «this.SelectedItems», но я бы хотел, чтобы он был «sender.SelectedItems».

Полагаю, причина отсутствия аргумента отправителя в том, что элемент управления не должен отвечать за то, что он так много знает о своей среде, и форма хоста должна обрабатывать взаимодействие между двумя элементами управления, но я пытаюсь создать сам Содержит элементы управления, которые имеют эту функциональность, поэтому позволить ему стечь на форму не будет работать.

Идеи

1 Ответ

1 голос
/ 02 ноября 2010

Я думаю, что вы можете узнать ListView из Предметов по свойству listViewItem.ListView, проверьте его.

Я не проверял код:

private void listView1_DragEnter(object sender, DragEventArgs e)
{
    if (!e.Data.GetDataPresent(typeof(ListView.ListViewItemCollection)))
    {
        e.Effect = DragDropEffects.None;
        return;
    }

    var items = (ListView.ListViewItemCollection)e.Data.GetData(typeof(ListView.ListViewItemCollection));

    if (items.Count > 0 && items[0].ListView != listView1)
    {
        e.Effect = DragDropEffects.None;
        return;
    }
}

Проверьте DragEventArgs , этот пример в CodeProject [VB.Net] Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...