是否可以通过CommonDialog控件选择目录?如果不行,那么要是想以选文件的方式选择目录该怎么实现呢?谢谢

解决方案 »

  1.   

    '打开目录浏览对话框API声明
    Public 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
    Public Const BIF_RETURNONLYFSDIRS = 1
    Public Const MAX_PATH = 260
    Public Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal hMem As Long)
    Public Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, ByVal lpString2 As String) As Long
    Public Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
    Public Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, ByVal lpBuffer As String) As Long'调用API打开目录浏览对话框
    Public Function BrowseForFolder(hwndOwner As Long, sPrompt As String) As String
         Dim iNull As Integer
         Dim lpIDList As Long
         Dim lResult As Long
         Dim sPath As String
         Dim udtBI As BrowseInfo
         With udtBI
            .hwndOwner = hwndOwner
            .lpszTitle = lstrcat(sPrompt, "")
            .ulFlags = BIF_RETURNONLYFSDIRS
         End With
         lpIDList = SHBrowseForFolder(udtBI)
         If lpIDList Then
            sPath = String$(MAX_PATH, 0)
            lResult = SHGetPathFromIDList(lpIDList, sPath)
            Call CoTaskMemFree(lpIDList)
            iNull = InStr(sPath, vbNullChar)
            If iNull Then sPath = Left$(sPath, iNull - 1)
         End If
         BrowseForFolder = sPath
    End Function
    dir = BrowseForFolder(Me.hwnd, "请选择外观面板的目录.")
      

  2.   

    CommonDialog1.showopen  可以选择目录的
      

  3.   

    CommonDialog1.showopen是不能选择目录的,只能选择文件
    设置initdir只是设置出示目录而已,并不能选择目录,好像不行啊
      

  4.   

    可以通过那个控件来做
        With CommonDialog1
            .CancelError = True
            .filter = "Pictures(*.gif;*.jpg)|*.bmp;*.ico;*.gif;*.jpg|" & _
            "Wave Files(*.wav)|*.wav|MS Video(*.avi)|*.avi|"
             .Flags = cdlOFNHideReadOnly
            .ShowOpen
            If Err.Number = cdlCancel Then
                Err.Clear
                Exit Sub
            End If
            Text1 = .FileName
        End With
    你试一下