天天看點

檔案夾_VB浏覽檔案夾擷取檔案夾路徑

我們前面的課程學習過ShowOpen方法,可以很友善的在對話框内,選擇一個或者多個檔案,并擷取檔案的路徑。

但是,如果需要擷取一個檔案夾路徑,那麼使用ShowOpen方法是無法辦到的,那麼該如何實作呢?

步驟一:

建立一個窗體和一個按鈕,如下所示:

檔案夾_VB浏覽檔案夾擷取檔案夾路徑

步驟二:

進入代碼編輯器,編寫如下所示代碼:

Option ExplicitPrivate Type BrowseInfo    hWndOwner As Long    pIDLRoot As Long    pszDisplayName As Long    lpszTitle As Long   ulFlags As Long    lpfnCallback As Long    lParam As Long    iImage As LongEnd TypeConst BIF_RETURNONLYFSDIRS = 1Const BIF_NEWDIALOGSTYLE = &H40Const BIF_EDITBOX = &H10Const BIF_USENEWUI = BIF_NEWDIALOGSTYLE Or BIF_EDITBOXConst MAX_PATH = 260Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As LongPrivate Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As LongPrivate Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As LongPublic Function BrowseForFolder(Optional sTitle As String = "請選擇檔案夾") As String    Dim iNull As Integer, lpIDList As Long, lResult As Long    Dim sPath As String, udtBI As BrowseInfo    With udtBI        .hWndOwner = 0 ' Me.hWnd        .lpszTitle = lstrcat(sTitle, "")        .ulFlags = BIF_RETURNONLYFSDIRS Or BIF_USENEWUI    End With    lpIDList = SHBrowseForFolder(udtBI)    If lpIDList Then       sPath = String$(MAX_PATH, 0)        SHGetPathFromIDList lpIDList, sPath        CoTaskMemFree lpIDList       iNull = InStr(sPath, vbNullChar)        If iNull Then          sPath = Left$(sPath, iNull - 1)        End If    End If    BrowseForFolder = sPathEnd FunctionPrivate Sub Command1_Click()    '調用函數,并顯示其傳回結果    MsgBox BrowseForFolder()End Sub
           

注意: 1,本代碼用到API,相對複雜,可以直接複制所有代碼進行測試。 2,"請選擇檔案夾"中的文字可以自行定義,其将會在對話框中作為提示性的文本,提示使用者操作。 步驟三: 運作程式,點選按鈕,則進入浏覽檔案夾的對話框,選擇一個檔案夾後,單擊确認按鈕。

檔案夾_VB浏覽檔案夾擷取檔案夾路徑

步驟四: 代碼将擷取到使用者選擇的檔案夾路徑後,傳回其路徑字元串。

檔案夾_VB浏覽檔案夾擷取檔案夾路徑

該方法還可以在浏覽檔案夾對話框時,建立檔案夾。對于需要使用者選擇一個檔案夾,并擷取使用者選擇的檔案夾路徑,利用這個方法是相當的不錯的。隻是代碼用到API還是比較麻煩的,不友善記憶和了解,是以建議小夥伴們可以收藏起來,以後用到的時候直接複制粘貼即可。