Домой Control Получение имен файлов при перетаскивании их в целевые объекты пользовательского интерфейса: Справочник...

Получение имен файлов при перетаскивании их в целевые объекты пользовательского интерфейса: Справочник по C#

718
0


      Перетаскиванием обычно называют метод передачи данных, который реализуется с помощью мыши (или другого указывающего устройства) для выбора одного или нескольких объектов и перетаскивания их в целевые объекты пользовательского интерфейса. События и методы необходимые для операций перетаскивания, определяются в классе «DragDrop».
      Для включения отслеживания событий «Drag and Drops», необходимо установить в элементе управления свойство «AllowDrop» в «true» и использовать одно или несколько следующих событий:

  • DragEnter — Происходит при завершении операции перетаскивания;
  • DragOver — Происходит, когда элемент перетаскивается с помощью мыши в клиентскую область этого элемента;
  • DragLeave — Происходит, когда объект перетаскивается на элемент управления;
  • DragDrop — Происходит, когда объект перетаскивается за пределы элемента управления;
  • GiveFeedback — Происходит, когда элемент перетаскивается с помощью мыши. Система запрашивает у элемента управления обеспечения обратной совместимости с этим эффектом;
  • QueryContinueDrag — Происходит при перетаскивании элемента. Система опрашивает, можно ли продолжать операцию перетаскивания мышью.

      Чтобы обработать перетаскивание одного или нескольких файлов внутрь элемента управления, необходимо обработать два события: «DragEnter» и «DragDrop». В «DragEnter» выполняется проверка, что перетаскиваемый элемент имеет тип «DataFormats.FileDrop». Если данное условие выполняется, то операция перетаскивания разрешается с установкой значения «DragDropEffects.All», иначе «DragDropEffects.None», указывающее, что целевой объект не принимает данные.
Событие «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». У вас откроется главная форма проекта, выберете в проводнике несколько файлов и перетащите их на любой элемент управления. После перетаскивания фалов, их имена и полный путь к ним, должны отобразиться в конечном элементе управления.

Ссылка для скачивания примера: Яндекс.Диск

ЧИТАТЬ ТАКЖЕ:  Игра с индикаторами NumLock, CapsLock, ScrollLock.: Справочник по C#

Получение имен файлов при перетаскивании их в целевые объекты пользовательского интерфейса: Справочник по C#

0.00 (0%) 0 votes

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь