.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 и добавляет их в массив строк. Каждый элемент массива будет содержать полный путь к каждому файлу, помещенному в элемент управления.
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);
}
}
Статья написана по мотивам оригинальной англоязычной версии. Исходный код с работающим примером так же доступен по ссылке из неё.
Полезная статья? Их будет больше, если вы поддержите меня!
Архив комментариев
2 комментария из прежней версии блога. Архив закрыт для новых ответов.
Возникла проблема, когда я хочу перетащить файл с проводника в программу на элемент panel и чтобы этот файл отобразился на элементе picturebox то при перетаскивании не происходит ни чего.
Разобрался, нужно было AllowDrop ставить true