LordMok Ответов: 2

Как перетащить папку в lisview in VB.NET


Я хочу иметь возможность перетаскивать папку в
элемент управления ListView.

Когда я опускаю папку в listview она будет отображать только файлы в папке,
в виде списка - и не только папки.

Поэтому удаление папки с файлами 4 .txt - должно отображать только файлы .txt в списке файлов.

Код, который я предоставил, работает для файлов, но я также хочу, чтобы он работал с падением папки.

Может ли кто - нибудь помочь здесь? :-)
Спасибо.

Столбцы в представлении списка :
FileList.View = System.Windows.Forms.View.Details
FileList.Columns.Add("FileName", 100, HorizontalAlignment.Left)


Что я уже пробовал:

Private Sub FileList_DragDrop(sender As Object, e As DragEventArgs) Handles FileList.DragDrop
    If e.Data.GetDataPresent(DataFormats.FileDrop) Then

         Dim MyFiles() As String
         Dim i As Integer
         Dim FileItem As New ListViewItem

         MyFiles = e.Data.GetData(DataFormats.FileDrop)


         For i = 0 To MyFiles.Length - 1

           FilePath = Path.GetDirectoryName(MyFiles(i))
           FileItem.Text = Path.GetFileNameWithoutExtension(MyFiles(i))

           FileList.Items.Add(FileItem.Text)

         Next
     End If
End Sub



Private Sub FileList_DragEnter(sender As Object, e As DragEventArgs) Handles FileList.DragEnter
     If e.Data.GetDataPresent(DataFormats.FileDrop) Then
         e.Effect = DragDropEffects.All
     End If
End Sub

2 Ответов

Рейтинг:
12

LordMok

Это заняло некоторое время, но я решил его сам :-)

Добавьте listview в свою форму и добавьте код :

Imports System.IO
Imports System.Net

Public Class Form1
Dim FileExt, FileName, FilePath As String
Dim i As Integer

'Form Load
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            FileList.View = System.Windows.Forms.View.Details

  FileList.Columns.Add("FileName", 350, HorizontalAlignment.Left)
  FileList.Columns.Add("EXT", 60, HorizontalAlignment.Center)
  FileList.Columns.Add("FilePath", 350, HorizontalAlignment.Left)
End Sub

'FileListview - Drag And Drop Enter
Private Sub FileList_DragEnter(sender As Object, e As DragEventArgs) Handles     
            FileList.DragEnter

   If e.Data.GetDataPresent(DataFormats.FileDrop) Then
     e.Effect = DragDropEffects.All
   End If
End Sub

    
'FileListView Drag And Drop Folder
Private Sub FileList_DragDrop(sender As Object, e As DragEventArgs) Handles    
            FileList.DragDrop

  If e.Data.GetDataPresent(DataFormats.FileDrop) Then
  Dim MyFiles() As String

   ' Assign the files to an array.
   MyFiles = e.Data.GetData(DataFormats.FileDrop)
   ' Loop through the array and add the files to the list.       

   'FOLDER DROP
    For i = 0 To MyFiles.Length - 1
    'For Each foundFile As String In My.Computer.FileSystem.GetFiles(MyFiles(i), 
     FileIO.SearchOption.SearchTopLevelOnly, "*.*") 'WITHOUT SUBFOLDERS
     
     For Each foundFile As String In My.Computer.FileSystem.GetFiles(MyFiles(i), 
     FileIO.SearchOption.SearchAllSubDirectories, "*.*") 'WITH SUBFOLDERS
                    
      FilePath = Path.GetDirectoryName(foundFile)
      FileName = Path.GetFileNameWithoutExtension(foundFile)
      FileExt = My.Computer.FileSystem.GetFileInfo(foundFile).Extension

      FileList.Items.Add(FileName)

       For Each File As ListViewItem In FileList.Items

         File.SubItems.Add(FileExt)
         File.SubItems.Add(FilePath)
       Next
      Next
     Next
   End If

 FileList.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent)
End Sub
End Class


Как получить коллекцию файлов в каталоге - Visual Basic | Microsoft Docs[^]


Рейтинг:
0

Sandeep Mewara

Верю, что вы добавляете текст в список, а не элемент listviewitem:

FileList.Items.Add(FileItem.Text)

Изменить это, и попробовать:
FileList.Items.Add(FileItem)

В случае необходимости, ссылка для вас: Listview перетаскивание из Проводника windows в VB.Net[^]
Папке с подпунктом:
' Loop through the array and add the files to the list.
For i = 0 To MyFiles.Length - 1

    Dim fileDetail As IO.FileInfo
    fileDetail = My.Computer.FileSystem.GetFileInfo(MyFiles(i))

    Dim objShell As Object
    Dim objFolder As Object
    Dim strFileTitle As Object

    objShell = CreateObject("Shell.Application")
    objFolder = objShell.Namespace(fileDetail.DirectoryName)
    strFileTitle = objFolder.GetDetailsOf(objFolder.ParseName(fileDetail.Name), 21)

    Dim objListViewItem As New ListViewItem
    objListViewItem.Text = fileDetail.Name
    objListViewItem.SubItems.Add(strFileTitle)
    objListViewItem.SubItems.Add(fileDetail.Extension)
    objListViewItem.SubItems.Add(fileDetail.FullName)
    ListView1.Items.Add(objListViewItem)

Next


Maciej Los

5ed!