2015-09-02 555 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像大多數其他控件一樣具有點擊和雙擊事件。

相關問題