天天看点

文件夹_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还是比较麻烦的,不方便记忆和理解,因此建议小伙伴们可以收藏起来,以后用到的时候直接复制粘贴即可。