commondialog.showopen
if commondialog.filename<>"" then
   msgbox commondialog.filename
endif

解决方案 »

  1.   

    我需要的是pathname,而不是filename
      

  2.   

    在 CommonDialog 控件里,FileName 返回或设置所选文件的路径和文件名
      

  3.   

    在 CommonDialog 控件里,FileName 返回或设置所选文件的路径和文件名
    然后用程序获得路径
      

  4.   

    下面是API实现的获得打开文件的路径目录的源码,感谢作者VERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   1485
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   3600
       LinkTopic       =   "Form1"
       ScaleHeight     =   1485
       ScaleWidth      =   3600
       StartUpPosition =   3  'Windows Default
       Begin VB.CommandButton Command1 
          Caption         =   "浏览"
          Height          =   375
          Left            =   1080
          TabIndex        =   0
          Top             =   480
          Width           =   1215
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    '这个程序演示利用Shell API函数弹出文件夹浏览窗口
    '
    '作者       陈锐
    'EMail      [email protected]
    '           [email protected]
    'WebSite    http://vbtip.syeah.netPrivate Declare Function SHBrowseForFolder Lib "shell32.dll" Alias _
            "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As LongPrivate Declare Function SHGetSpecialFolderLocation Lib _
            "shell32.dll" (ByVal hwndOwner As Long, ByVal nFolder _
            As Long, pIdl As ITEMIDLIST) As LongPrivate Declare Function SHGetFileInfo Lib "Shell32" Alias _
            "SHGetFileInfoA" (ByVal pszPath As Any, ByVal _
            dwFileAttributes As Long, psfi As SHFILEINFO, ByVal _
            cbFileInfo As Long, ByVal uFlags As Long) As LongPrivate Declare Function ShellAbout Lib "shell32.dll" Alias _
            "ShellAboutA" (ByVal hwnd As Long, ByVal szApp As _
            String, ByVal szOtherStuff As String, ByVal hIcon As Long) _
            As Long
    Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
            Alias "SHGetPathFromIDListA" (ByVal pIdl As Long, ByVal _
            pszPath As String) As Long
    Private Declare Sub CoTaskMemFree Lib "ole32.dll" (ByVal pv As Long)Const MAX_PATH = 260Private Type SHITEMID
        cb As Long
        abID() As Byte
    End TypePrivate Type ITEMIDLIST
        mkid As SHITEMID
    End TypePrivate Type BROWSEINFO
        hOwner As Long
        pidlRoot As Long
        pszDisplayName As String
        lpszTitle As String
        ulFlags As Long
        lpfn As Long
        lParam As Long
        iImage As Long
    End TypePrivate Type SHFILEINFO
        hIcon As Long
        iIcon As Long
        dwAttributes As Long
        szDisplayName As String * MAX_PATH
        szTypeName As String * 80
    End Type
    Private Function GetFolderValue(wIdx As Integer) As Long
        If wIdx < 2 Then
            GetFolderValue = 0
        ElseIf wIdx < 12 Then
            GetFolderValue = wIdx
        Else
            GetFolderValue = wIdx + 4
        End If
    End FunctionPrivate Sub Command1_Click()
      Dim BI As BROWSEINFO
      Dim nFolder As Long
      Dim IDL As ITEMIDLIST
      Dim pIdl As Long
      Dim sPath As String
      Dim SHFI As SHFILEINFO
      Dim m_wCurOptIdx As Integer
      Dim txtPath As String
      Dim txtDisplayName As String
      
      With BI
        .hOwner = Me.hwnd
        nFolder = GetFolderValue(m_wCurOptIdx)
        
        If SHGetSpecialFolderLocation(ByVal Me.hwnd, ByVal nFolder, IDL) = NOERROR Then
          .pidlRoot = IDL.mkid.cb
        End If
        
        .pszDisplayName = String$(MAX_PATH, 0)
        .lpszTitle = "Browsing is limited to: "
        .ulFlags = 0
      End With
      
      txtPath = ""
      txtDisplayName = ""
      
      pIdl = SHBrowseForFolder(BI)
      
      If pIdl = 0 Then Exit Sub
      sPath = String$(MAX_PATH, 0)
      SHGetPathFromIDList ByVal pIdl, ByVal sPath  txtPath = Left(sPath, InStr(sPath, vbNullChar) - 1)
      txtDisplayName = Left$(BI.pszDisplayName, _
                        InStr(BI.pszDisplayName, vbNullChar) - 1)
      
      SHGetFileInfo ByVal pIdl, 0&, SHFI, Len(SHFI), _
                    SHGFI_PIDL Or SHGFI_ICON Or SHGFI_SMALLICON
      
      SHGetFileInfo ByVal pIdl, 0&, SHFI, Len(SHFI), _
                    SHGFI_PIDL Or SHGFI_ICON
      CoTaskMemFree pIdl
      MsgBox "你选择的文件夹是" + Chr(13) + Chr(10) + txtPath
    End Sub
      

  5.   

    用curdir()就可以了。
    因为公共对话框会改变系统的当前路径,而curdir是一个返回系统当前路径的函数。
    这是一个偏方,但不会错的。