Drag&Drop в Explorer

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Drag&Drop в Explorer

Сообщение ASD » 13.02.2009 (Пт) 12:39

Такая проблема, надо реализовать D&D из ListView в Explorer (файловый) а вообще в любую программу для файлов.
В принципе это не сложно но у меня одна проблема.
Файлы находятся на сервере и я не могу передать пути к ним (FileDrop).
Т.е. Мне надо получить путь на то куда бросили файлы и уже своей программой туда их поместить.
Moderator VBStreets
---------------------------

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Drag&Drop в Explorer

Сообщение iGrok » 13.02.2009 (Пт) 13:27

ASD писал(а):Такая проблема, надо реализовать D&D из ListView в Explorer (файловый) а вообще в любую программу для файлов.
В принципе это не сложно но у меня одна проблема.
Файлы находятся на сервере и я не могу передать пути к ним (FileDrop).
Т.е. Мне надо получить путь на то куда бросили файлы и уже своей программой туда их поместить.


Это не совсем то, конечно.. Но что если извратиться, и перед D&D кидать файл во временную папку, и давать именно этот временный путь, а после копирования удалять?
label:
cli
jmp label

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Drag&Drop в Explorer

Сообщение Nord777 » 13.02.2009 (Пт) 13:30

Мне надо получить путь на то куда бросили файлы и уже СВОЕЙ программой туда их поместить
Именно своей? А чем обусловлено такое желание? У целевой стороны нет доступа к файлам на сервере?
Если это так, то есть одна мысля(и Igrok меня уже опередил :)).
А механизм Drag-and-Drop мне кажется не позволит тебе сделать задуманное.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 13.02.2009 (Пт) 13:54

Эта идея у меня была уже, но что если к примеру там куча мелких файлов или один большой...
Это займет время на передачу с сервера + перенос или копирование из темпа...
Почему нужна такая реализация, потому что к фалам не указать пути... они передаются по сети...
Вообще например как реализуют такое например с FTP клиентами? Не ужели они в темп льют сначала?
Пока ничего не нагуглил... :(
Moderator VBStreets
---------------------------

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 18.02.2009 (Ср) 15:41

Такой вопрос по теме. Как сбросить выделенное в Explorer/

Делаю так:

Код: Выделить всё

Private Sub FileList_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles FileList.MouseDown

        Dim filea(1) As String
        filea(0) = "c:\us.txt"
        Dim _data As DataObject = New DataObject(DataFormats.FileDrop, filea)
        FileList.DoDragDrop(_data, DragDropEffects.Copy)


    End Sub



И нифига. Пробовал в ItemDrag DragLeave ....
Причем в гугле примеры как у меня... Но почему то Explorer не делает копирования (файл естессно есть)
Moderator VBStreets
---------------------------

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 18.02.2009 (Ср) 15:51

Отбой! Понял... Блин массив больше чем надо.
Moderator VBStreets
---------------------------

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 18.02.2009 (Ср) 16:26

Рано радовался :)

Выручайте, как правильно сделать что бы когда произошел Drop в Explorer(или др приложение), сначала закачать файлы в темп а потом передать их Explorerу ?
Moderator VBStreets
---------------------------

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Drag&Drop в Explorer

Сообщение Nord777 » 18.02.2009 (Ср) 23:57

Код: Выделить всё
   Private Sub ListView1_ItemDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemDragEventArgs) Handles ListView1.ItemDrag
      Dim StrCollection As New System.Collections.Specialized.StringCollection()
      Dim LV As ListView = CType(sender, ListView)
      Dim DestPath, SourcePath, TmpDir As String
      Dim DObj As New DataObject

      TmpDir = Path.Combine(Path.GetTempPath, Path.GetRandomFileName)

      'Создать папку во временном каталоге
      Directory.CreateDirectory(TmpDir)

      For Each LVI As ListViewItem In LV.SelectedItems
         'Скопировать каждый файл во временную папку
         SourcePath = Path.Combine(LVI.SubItems(0).Text, LVI.Text)
         DestPath = Path.Combine(TmpDir, Path.GetFileName(LVI.Text))

         My.Computer.FileSystem.CopyFile(SourcePath, DestPath, True)
         StrCollection.Add(DestPath)
      Next

      DObj.SetFileDropList(StrCollection)
      LV.DoDragDrop(DObj, DragDropEffects.Copy)

   End Sub
Один нюанс. Файлы кидаются во временную папку не во время дропа, а в начале перетаскивания.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 19.02.2009 (Чт) 11:32

Я сделал так. Тогда копируется после дропа в др. приложение. (пути конечно генерить и передавать надо заранее)

Код: Выделить всё
   Private Sub FileList_QueryContinueDrag(ByVal sender As Object, ByVal e As System.Windows.Forms.QueryContinueDragEventArgs) Handles FileList.QueryContinueDrag

        If e.Action = DragAction.Drop Then
            My.Computer.FileSystem.CreateDirectory(_DropToPath)
            DownloadFiles(_DropToPath)
        End If
    End Sub

Moderator VBStreets
---------------------------

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Drag&Drop в Explorer

Сообщение Nord777 » 19.02.2009 (Чт) 14:15

При таком раскладе прога будет реагировать на любое отпускание кнопки мыши.
Тебе тогда надо еще анализировать последнее значение e.Effect в обработчике GiveFeedback.
Если оно не равно DragAction.Cancel или DragAction.None, то значит другое приложение способно принять файлы,
в противном случае - нет.
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 19.02.2009 (Чт) 14:44

не на любое а только на drop.
Если приложение не приняло то и не будет drop
Будет cancel
Moderator VBStreets
---------------------------

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Drag&Drop в Explorer

Сообщение Nord777 » 19.02.2009 (Чт) 14:59

Cancel будет если пользователь во время перетаскивания нажимает esc
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Re: Drag&Drop в Explorer

Сообщение ASD » 19.02.2009 (Чт) 15:39

Ты прав... В принципе так и отслеживают (судя по гуглевым примерам)...
Moderator VBStreets
---------------------------


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList