2014-04-21 96 views
0

我試圖將文件路徑存儲在列表框項目的標籤中。將文件路徑添加到列表框項目

我使用下面通過搜索並添加所需的文件夾名稱列表框中

我已經添加了ListBox1.Tag = sDir線到第一Next上方,當我踏上thorugh代碼sDir值似乎保留路徑但是如果我創建一個簡單的Double click事件,彈出消息框,其中的文件路徑只顯示列表中的第一個文件夾名稱。

任何提示或建議 - 我基本上想選擇一個列表框項目,並指向它的路徑!

感謝

For Each Dir As String In System.IO.Directory.GetDirectories("c:\Working") 

     Dim dirInfo As New System.IO.DirectoryInfo(Dir) 

     For Each sDir As String In System.IO.Directory.GetDirectories(dirInfo.ToString) 

      Dim sdirInfo As New System.IO.DirectoryInfo(sDir) 

      ListBox1.Items.Add(sdirInfo.Name) 
      ListBox1.Tag = sDir 
     Next 

    Next 
+0

ListBox中的所有項目只有一個標籤,因此如果項目可能有不同的路徑不會工作。您可以將對象存儲爲項目,以便您可以編寫一個簡單的類來存儲文件名,路徑以及任何其他項作爲每個項目。 – Plutonix

回答

1

可以存儲對象的項目,所以小類來存儲項目信息:

Public Class myClass 
    Public Property FileName as String 
    Public Property PathName As String 
    Public Foo As Integer 

    ' class is invalid w/o file and path: 
    Public Sub New(fName As String, pName As String) 
     FileName = FName 
     PathName = pName 
    End Sub 


    ' this will cause the filename to show in the listbox 
    Public Overrides Function ToString() AS String 
     Return FileName 
    End Sub 
End Class 

現在,您可以將這些存儲爲您加載列表框/找到他們:

Dim El as MyClass   ' temp var for posting to listbox 

' in the loop: 
El = New MyClass(filename, pathName) ' use names from your Dir/File objects 
ListBox1.Items.Add(El) 

,並把它找回來:

' INDEX_TO_READ is a dummy var of the index you want to get 
' SelectedItem will also work 
thisFile = Ctype(ListBox1.Items(INDEX_TO_READ), MyClass).FileName 
thisPath = Ctype(ListBox1.Items(INDEX_TO_READ), MyClass).PathName 
' or: 
Dim aFile As myClass = Ctype(ListBox1.Items(INDEX_TO_READ), MyClass) 
+0

感謝您的幫助 - 真的很感激。我錯過了一些非常簡單的事情,因爲我得到了El,文件名,路徑名和INDEX_TO_READ,因爲'沒有聲明'錯誤 – elmonko

+0

上面的代碼更像是如何使用它們的片段*通常*而不是完成代碼 - 我無法看到哪裏文件名稱來自。 INDEX_TO_READ是一個虛擬變量,您可以在其中使用列表項目的索引(或使用SelectedItem或SelectedIndex - 該點應顯示如何將項目轉換回myClass對象)。查看編輯。 – Plutonix

相關問題