C # - перетащить элемент из списка в корзину? - PullRequest
6 голосов
/ 20 мая 2010

Как перетащить элемент из элемента управления Winforms-listview в другой элемент управления (изображение корзины)?

UPDATE1:

Я думаю, что основнойПоток:

  • для события ItemDrag в просмотре списка есть DoDragDrop
  • Затем в графическом окне есть событие DragEnter, которое захватывает это перетаскивание?

ОБНОВЛЕНИЕ2:

Основной поток (на основе ответов):

  • добавить событие ItemDrag в представление списка.
  • добавить 'DoDragDrop 'внутри' ItemDrag '
  • добавляет событие' DragEnter 'в графическое окно.
  • добавляет проверку' GetDataPresent 'внутри' DragEnter ', чтобы проверить тип данных
  • добавить событие 'DragDrop' в поле рисунка
  • добавить проверку 'GetDataPresent' внутри 'DragEnter', чтобы проверить тип данных

Ответы [ 3 ]

14 голосов
/ 20 мая 2010

Реализация обработчика события для события ItemDrag представления списка:

    private void listView1_ItemDrag(object sender, ItemDragEventArgs e) {
        DoDragDrop(e.Item, DragDropEffects.Move);
    }

И напишите обработчики событий для мусорной корзины:

    private void trashCan_DragEnter(object sender, DragEventArgs e) {
        if (e.Data.GetDataPresent(typeof(ListViewItem))) {
            e.Effect = DragDropEffects.Move;
        }
        // others...
    }

    private void trashCan_DragDrop(object sender, DragEventArgs e) {
        if (e.Data.GetDataPresent(typeof(ListViewItem))) {
            var item = e.Data.GetData(typeof(ListViewItem)) as ListViewItem;
            item.ListView.Items.Remove(item);
        }
        // others...
    }

Вам нужно принудительно установить свойство AllowDrop для PictureBox, оно недоступно в окне свойств:

    public Form1() {
        InitializeComponent();
        trashCan.AllowDrop = true;
    }
2 голосов
/ 20 мая 2010
2 голосов
/ 20 мая 2010

РЕДАКТИРОВАТЬ Это применимо, только если вы хотите, чтобы встроенная оболочка перетаскивала. Если вы не интегрируетесь с оболочкой, а просто перетаскиваете объекты в своем приложении, этот ответ не применяется. Мои извинения за путаницу.


Вы должны поддерживать drag-n-drop в своем приложении или элементе управления. Это предполагает некоторое COM-взаимодействие.

Сначала это кажется немного сложным, но как только вы раскроете базовый скелет, его будет не так сложно реализовать. Также здесь есть хороший гид, в котором рассказывается, как:

http://blogs.msdn.com/adamroot/pages/shell-style-drag-and-drop-in-net-wpf-and-winforms.aspx

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