Перетаскивание текстовых файлов из Проводника Windows в приложение Windows Form

Автор: Супротим Агарвал (Suprotim Agarwal)

Аннотация. В этой короткой статье описывается, как перетаскивать файлы с рабочего стола/из проводника Windows в созданное приложение Windows Form. В этой статье текстовые файлы будут перетащены с рабочего стола в созданное приложение WinForm, чтобы отобразить содержимое текстовых файлов.

В этой короткой статье описывается, как перетаскивать файлы с рабочего стола/из проводника Windows в созданное приложение Windows Form. В этой статье текстовые файлы будут перетащены с рабочего стола в созданное приложение WinForm, чтобы отобразить содержимое текстовых файлов. Посмотрим, какие шаги для этого необходимы.

Шаг 1. Откройте Visual Studio > Файл > Создать > Проект. В области "Типы проектов" выберите нужный язык (Visual C# или Visual Basic). В области "Шаблоны" выберите "Приложение Windows". Выберите имя и папку проекта, а затем нажмите кнопку ОК.

Шаг 2. Чтобы настроить функциональную возможность перетаскивания, кратко рассмотрим необходимые шаги. Предположим, что это приложение WinForm готово и работает. Пользователь выделяет один или несколько текстовых файлов на рабочем столе или в проводнике Windows. Затем пользователь перетаскивает выделенные файлы на форму работающего приложения. Содержимое всех текстовых файлов отображается в приложении. Для выполнения операции понадобится обработать следующие события.

Событие DragEnter формы — это событие будет обрабатываться при перетаскивании файла в границы формы.

Событие DragDrop формы — возникает при завершении операции перетаскивания.

Шаг 3. В событии загрузки формы зарегистрируйте события для операции перетаскивания, как показано ниже. Обратите внимание, что для свойства "AllowDrop" нужно задать значение true, чтобы разрешить перетаскивание элементов на форму:

C#

private void Form1_Load(object sender, EventArgs e)

{

    this.AllowDrop = true;

    this.DragEnter += Form1_DragEnter;

    this.DragDrop += Form1_DragDrop;

}

VB.NET

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
      Me.AllowDrop = True
      Me.DragEnter += Form1_DragEnter
      Me.DragDrop += Form1_DragDrop
End Sub

Шаг 4. Следующим этапом будет добавление кода для перечисленных выше событий:

C#

private void Form1_DragEnter(object sender, DragEventArgs e)

{

    if (e.Data.GetDataPresent(DataFormats.FileDrop))

    {

        e.Effect = DragDropEffects.Copy;

    }

    else

    {

        e.Effect = DragDropEffects.None;

    }

}

 

private void Form1_DragDrop(object sender, DragEventArgs e)

{

    if (e.Data.GetDataPresent(DataFormats.FileDrop))

    {

        string[] filePaths = (string[])(e.Data.GetData(DataFormats.FileDrop));

        foreach (string fileLoc in filePaths)

        {

            // Код для чтения содержимого текстового файла

            if (File.Exists(fileLoc))

            {

                using (TextReader tr = new StreamReader(fileLoc))

                {

                    MessageBox.Show(tr.ReadToEnd());

                }

            }

 

        }

    }

}

VB.NET

Private Sub Form1_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs)
      If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            e.Effect = DragDropEffects.Copy
      Else
            e.Effect = DragDropEffects.None
      End If
End Sub
 
Private Sub Form1_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs)
      If e.Data.GetDataPresent(DataFormats.FileDrop) Then
            Dim filePaths As String() = CType(e.Data.GetData(DataFormats.FileDrop), String())
            For Each fileLoc As String In filePaths
                  ' Код для чтения содержимого текстового файла
                  If File.Exists(fileLoc) Then
                        Using tr As TextReader = New StreamReader(fileLoc)
                              MessageBox.Show(tr.ReadToEnd())
                        End Using
                  End If
 
            Next fileLoc
      End If
End Sub

В Form1_DragEnter поле DataFormats.FileDrop используется для взаимодействия с файлами оболочки во время перетаскивания. Этот метод вызывается перед GetData().

Наконец в Form1_DragDrop в массив строк, используя метод GetDate(), извлекаются пути к файлам. Поэтому, если в приложение с рабочего стола перетаскиваются два файла, массив строк будет содержать два пути к файлам. Последним шагом является цикл по путям к файлам и использование StreamReader для чтения содержимого текстового файла.

Это все. Запустите пример, и можно будет выполнить операции перетаскивания с рабочего стола/из проводника Windows на форму работающего приложения. Я надеюсь, эта статья была полезной, и благодарю за то, что вы ее прочитали.

Если статья понравилась, подпишитесь на мой RSS-канал.