VB实现选取文件夹路径

在VB中直接选取文件路径直接使用控件就可以实现

选取文件夹路径可以采用下述办法。

 

添加模块文件直接进行调用。模块内容代码

'---------------------------------------------------------------------------------------
' Module    : ModuleFile
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 文件相关操作模块
' Function  : 1、选取文件夹
'---------------------------------------------------------------------------------------

Option Explicit

Private 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 Long
End Type
Const BIF_RETURNONLYFSDIRS = 1
Const BIF_NEWDIALOGSTYLE = &H40
Const BIF_EDITBOX = &H10
Const BIF_USENEWUI = BIF_NEWDIALOGSTYLE Or BIF_EDITBOX
Const MAX_PATH = 260
Private 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 Long
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long


'---------------------------------------------------------------------------------------
' Procedure : BrowseForFolder
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 选取文件夹(不含新建文件夹指令) 返回BrowseForFolder
'---------------------------------------------------------------------------------------
'
Public 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 = sPath
End Function


'---------------------------------------------------------------------------------------
' Procedure : BrowseForFolder1
' Author    : ROVAST
' Date      : 2014-4-22
' Purpose   : 选取文件夹路径(含新建文件夹) 返回BrowseForFolder1 字符串
'---------------------------------------------------------------------------------------
'
Public Function BrowseForFolder1(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
    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

    BrowseForFolder1 = sPath
End Function


在主窗体中可以插入按钮。添加下述代码,其中前一个没有新建文件夹功能,后一个有新建文件夹功能

Option Explicit

Private Sub Command1_Click()
    Dim path1 As String
    path1 = BrowseForFolder
    MsgBox path1
End Sub

Private Sub Command2_Click()
    Dim path As String
    path = BrowseForFolder1
    MsgBox path
End Sub


此方法也是摘自互联网,自己只是整理了一下,具体原理自己也不是很清楚。当然要是有人愿意分析更好了,现在由于时间原因,也只能是拿来主义了

参考地址:http://zhidao.baidu.com/question/333483648.html?qbl=relate_question_3&word=vb%20%D1%A1%D4%F1%CE%C4%BC%FE%BC%D0%B6%D4%BB%B0%BF%F2

你可能感兴趣的:(VB/VC/MFC/VC++)