.NET Framework позволяет легко обнаруживать перетаскиваемые объекты в/из приложения Windows Forms. Для этого можно использовать одно или несколько из доступных событий drag and drop. В обработчиках этих событий можно проверить, является ли объект файлом.
Для включения отслеживания событий drag and drops, нужно установить свойство AllowDrop в true и использовать одно или несколько следующих событий:
-
DragEnter: Возникает при завершении операции перетаскивания
-
DragOver: Происходит, когда элемент перетаскивается с помощью мыши в клиентскую область этого элемента.
-
DragDrop: Возникает, когда объект перетаскивается за пределы элемента управления.
-
DragLeave: Возникает, когда объект перетаскивается на элемент управления.
-
GiveFeedback: Происходит, когда элемент перетаскивается с помощью мыши. Система запрашивает у элемента управления обеспечения обратной совместимости с этим эффектом.
-
QueryContinueDrag: Происходит при перетаскивании элемента. Система опрашивает, можно ли продолжать операцию перетаскивания мышью.
Чтобы обработать перетаскивание одного или нескольких файлов внутрь элемента управления, необходимо обработать два события: DragEnter и DragDrop. В DragEnter мы проверяем, что перетаскиваемый элемент имеет тип DataFormats.FileDrop. Если это так, операция перетаскивания правда операция перетаскивания разрешается. Событие DragDrop получает список файлов для помещения в элемент с помощью метода GetData и добавляет их в массив строк. Каждый элемент массива будет содержать полный путь к каждому файлу, помещенному в элемент управления.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
private void filesListBox_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) { e.Effect = DragDropEffects.All; } } private void filesListBox_DragDrop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); foreach (string file in files) { filesListBox.Items.Add(file); } } |
Статья написана по мотивам оригинальной англоязычной версии. Исходный код с работающим примером так же доступен по ссылке из неё.
Полезная статья? Их будет больше, если вы поддержите меня!