Перетаскиванием обычно называют метод передачи данных, который реализуется с помощью мыши (или другого указывающего устройства) для выбора одного или нескольких объектов и перетаскивания их в целевые объекты пользовательского интерфейса. События и методы необходимые для операций перетаскивания, определяются в классе «DragDrop».
Для включения отслеживания событий «Drag and Drops», необходимо установить в элементе управления свойство «AllowDrop» в «true» и использовать одно или несколько следующих событий:
Событие «DragDrop» получает список файлов для помещения в элемент с помощью метода «GetData» и добавляет их в массив строк. Каждый элемент массива будет содержать полный путь и имя к каждому файлу, помещенному в элемент управления.
В данной статье рассмотрено обнаружение перетаскивания объектов в приложения Windows Forms с использованием .NET Framework.
Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на форму следующие элементы управления:
Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже листинг, установки имен методов на определенные события элементов управления расположенных на форме.
Для включения отслеживания событий «Drag and Drops», необходимо установить в элементе управления свойство «AllowDrop» в «true» и использовать одно или несколько следующих событий:
- DragEnter - Происходит при завершении операции перетаскивания;
- DragOver - Происходит, когда элемент перетаскивается с помощью мыши в клиентскую область этого элемента;
- DragLeave - Происходит, когда объект перетаскивается на элемент управления;
- DragDrop - Происходит, когда объект перетаскивается за пределы элемента управления;
- GiveFeedback - Происходит, когда элемент перетаскивается с помощью мыши. Система запрашивает у элемента управления обеспечения обратной совместимости с этим эффектом;
- QueryContinueDrag - Происходит при перетаскивании элемента. Система опрашивает, можно ли продолжать операцию перетаскивания мышью.
Событие «DragDrop» получает список файлов для помещения в элемент с помощью метода «GetData» и добавляет их в массив строк. Каждый элемент массива будет содержать полный путь и имя к каждому файлу, помещенному в элемент управления.
В данной статье рассмотрено обнаружение перетаскивания объектов в приложения Windows Forms с использованием .NET Framework.
Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на форму следующие элементы управления:
- System.Windows.Forms.CheckedListBox checkedListBox1;
- System.Windows.Forms.ComboBox comboBox1;
- System.Windows.Forms.ListBox listBox1;
- System.Windows.Forms.TextBox textBox1;
- System.Windows.Forms.TreeView treeView1;
Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже листинг, установки имен методов на определенные события элементов управления расположенных на форме.
checkedListBox1.AllowDrop = true; checkedListBox1.DragEnter += new DragEventHandler(checkedListBox1_DragEnter); checkedListBox1.DragDrop += new DragEventHandler(checkedListBox1_DragDrop); listBox1.AllowDrop = true; listBox1.DragEnter += new DragEventHandler(listBox1_DragEnter); listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop); comboBox1.AllowDrop = true; comboBox1.DragEnter += new DragEventHandler(comboBox1_DragEnter); comboBox1.DragDrop += new DragEventHandler(comboBox1_DragDrop); textBox1.AllowDrop = true; textBox1.DragEnter += new DragEventHandler(textBox1_DragEnter); textBox1.DragDrop += new DragEventHandler(textBox1_DragDrop); treeView1.AllowDrop = true; treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter); treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop);Так же добавьте в листинг главной формы, приведенные ниже методы обработки перетаскиваемых файлов в элементы управления формы.
private void checkedListBox1_DragEnter(object sender, DragEventArgs e) { //Разрешаем Drop только файлам e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None; } private void checkedListBox1_DragDrop(object sender, DragEventArgs e) { //Извлекаем имя перетаскиваемого файла string[] strings = (string[])e.Data.GetData(DataFormats.FileDrop, true); checkedListBox1.Items.Add(strings[0]); } private void listBox1_DragEnter(object sender, DragEventArgs e) { //Разрешаем Drop только файлам e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None; } private void listBox1_DragDrop(object sender, DragEventArgs e) { //Извлекаем имя перетаскиваемого файла string[] strings = (string[])e.Data.GetData(DataFormats.FileDrop, true); listBox1.Items.Add(strings[0]); } private void comboBox1_DragEnter(object sender, DragEventArgs e) { //Разрешаем Drop только файлам e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None; } private void comboBox1_DragDrop(object sender, DragEventArgs e) { //Извлекаем имя перетаскиваемого файла string[] strings = (string[])e.Data.GetData(DataFormats.FileDrop, true); comboBox1.Items.Add(strings[0]); } private void textBox1_DragEnter(object sender, DragEventArgs e) { //Разрешаем Drop только файлам e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None; } private void textBox1_DragDrop(object sender, DragEventArgs e) { //Извлекаем имя перетаскиваемого файла string[] strings = (string[])e.Data.GetData(DataFormats.FileDrop, true); textBox1.Text = strings[0]; }Приведенные выше методы добавляют только один файл в перетаскиваемый элемент управления, в не того сколько файлов вы пытались перетащить. Ниже представлены методы для элемента управления «treeView1», которые добавляют имена и полный путь к ним, всех перетаскиваемых файлов. Добавьте данные методы в листинг главной формы.
private void treeView1_DragEnter(object sender, DragEventArgs e) { //Разрешаем Drop только файлам e.Effect = e.Data.GetDataPresent(DataFormats.FileDrop) ? DragDropEffects.All : DragDropEffects.None; } private void treeView1_DragDrop(object sender, DragEventArgs e) { //Извлекаем имена перетаскиваемых файлов string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, true); foreach (string File in FileList) treeView1.Nodes.Add(File); }Запустите ваш проект, нажав на клавиатуре клавишу «F5». У вас откроется главная форма проекта, выберете в проводнике несколько файлов и перетащите их на любой элемент управления. После перетаскивания фалов, их имена и полный путь к ним, должны отобразиться в конечном элементе управления.
Ссылка для скачивания примера: Яндекс.Диск