2015-09-02 187 views
1

我是新来的使用listview来显示图标。我还有几个问题...使用listview作为文件/文件夹资源管理器

我目前使用以下代码作为示例。此代码工作正常,但我有疑问

  1. 如何摆脱路径名称并只保留文件/文件夹名称?
  2. 我该如何列出文件夹旁边的文件夹?
  3. 如何点击打开这些图标?

-

For Each File In System.IO.Directory.GetFiles("C:\") 
    Dim icons As Icon = Icon.ExtractAssociatedIcon(File) 
    ListView1.Items.Add(File.ToString, ImageList1.Images.Count - 1) 
    ImageList1.Images.Add(icons) 
    ListView1.Items.Add(File.ToString, ImageList1.Images.Count) 
Next 

回答

1

你可能有一个考虑使用树状......希望帮助

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Dim x As Integer 
    For x = 0 To My.Computer.FileSystem.Drives.Count - 1 
     If My.Computer.FileSystem.Drives(x).IsReady = True Then 
      TreeView1.Nodes.Add(My.Computer.FileSystem.Drives(x).Name, My.Computer.FileSystem.Drives(x).Name) 
      TreeView1.Nodes(My.Computer.FileSystem.Drives(x).Name).Tag = My.Computer.FileSystem.Drives(x).Name 
      For Each SubDirectory As String In My.Computer.FileSystem.GetDirectories(My.Computer.FileSystem.Drives(x).Name) 
       TreeView1.Nodes(x).Nodes.Add(SubDirectory, Mid(SubDirectory, 4)) 
       TreeView1.Nodes(x).Nodes(SubDirectory).Tag = SubDirectory 
      Next 
     End If 
    Next 
End Sub 
1

假设你想要的不仅仅是File,并在LV Folder名(更像Explorer),我会用DirectoryInfo

Dim lvi As ListViewItem 
Dim di As New DirectoryInfo("C:\Temp") 
Dim myIcon As Icon 

' ext/icon lookup 
Dim exts As New List(Of String) 
ImageList1.Images.Clear() 

For Each fi As FileInfo In di.EnumerateFiles("*.*") 

    lvi = New ListViewItem 
    lvi.Text = fi.Name 
    lvi.SubItems.Add(Path.GetDirectoryName(fi.FullName)) 

    lvi.SubItems.Add(((fi.Length/1024)).ToString("0.00")) 
    lvi.SubItems.Add(fi.CreationTime.ToShortDateString) 

    If exts.Contains(fi.Extension) = False Then 
     myIcon = Icon.ExtractAssociatedIcon(fi.FullName) 
     ImageList1.Images.Add(fi.Extension, myIcon) 
     exts.Add(fi.Extension) 
    End If 

    lvi.ImageKey = fi.Extension 
    myLV.Items.Add(lvi) 
Next 

该代码使用List(of String)来跟踪哪些图标已被添加,以便您不会为重复的文件类型反复添加相同的图像。另外,它显示名称,文件夹,大小,日期和图标。

enter image description here

使用Directory将依靠System.io.Path越来越大小和日期代码将无法使用:

For Each s As String In Directory.EnumerateFiles("C:\Temp") 

    lvi = New ListViewItem 
    lvi.Text = Path.GetFileName(s) 
    lvi.SubItems.Add(Path.GetDirectoryName(s)) 

    Dim fileExt = Path.GetExtension(s) 
    If exts.Contains(fileExt) = False Then 
     myIcon = Icon.ExtractAssociatedIcon(s) 
     ImageList1.Images.Add(fileExt, myIcon) 
     exts.Add(fileExt) 
    End If 

    lvi.ImageKey = fileExt 
    myLV.Items.Add(lvi) 
Next 

How can I click open these icons这是一个不同的问题。请记住,LV只包含字符串(文本),并从文件中删除了路径。因此,您必须首先将它们粘合在一起以获取合法名称(或将其存储在LV中)。也就是说,LV像大多数其他控件一样具有点击和双击事件。

相关问题