就象调用普通应用程序菜单中的的"文件","打开",然后选取一些文件,然后返回这些文件的列表?

解决方案 »

  1.   

    Private Sub Command1_Click()
    On Error GoTo Err
        CommonDialog1.CancelError = True    CommonDialog1.ShowOpen
        If CommonDialog1.filename <> "" Then
             msgbox CommonDialog1.FileTitle
             msgbox CommonDialog1.filename
        End If
        
    Err:
        If Err.Number = 32755 Then
            MsgBox "你按了取消!", vbCritical, "系统提示"
        End If
    End Sub
      

  2.   

    Option ExplicitPrivate Type OPENFILENAME
        lStructSize As Long
        hwndOwner As Long
        hInstance As Long
        lpstrFilter As String
        lpstrCustomFilter As String
        nMaxCustFilter As Long
        nFilterIndex As Long
        lpstrFile As String
        nMaxFile As Long
        lpstrFileTitle As String
        nMaxFileTitle As Long
        lpstrInitialDir As String
        lpstrTitle As String
        flags As Long
        nFileOffset As Integer
        nFileExtension As Integer
        lpstrDefExt As String
        lCustData As Long
        lpfnHook As Long
        lpTemplateName As String
    End Type'系统全局常量========================================================================
    Private Const OFN_LONGNAMES = &H200000
    Private Const OFN_PATHMUSTEXIST = &H800
    Private Const OFN_FILEMUSTEXIST = &H1000
    Private Const OFN_HIDEREADONLY = &H4
    Private Const OFN_EXPLORER = &H80000
    Private Const OFN_OVERWRITEPROMPT = &H2
    Private Const OFN_ALLOWMULTISELECT = &H200Private Const CB_FINDSTRING = &H14C
    Private Const CB_FINDSTRINGEXACT = &H158
    Private Const LB_FINDSTRING = &H18F
    Private Const EM_SETREADONLY = &HCF
    Private Const SND_RESOURCE = &H40004
    Private Const SND_ASYNC = &H1         '  play asynchronously
    Private Const SND_MEMORY = &H4         '  lpszSoundName points to a memory file
    Private Const SND_NODEFAULT = &H2         '  silence not default, if sound not found'系统全局函数========================================================================
    Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
    Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As LongPrivate Sub Command1_Click()
        Dim fName As String, OfName As OPENFILENAME    OfName.lStructSize = Len(OfName)
        OfName.hwndOwner = Me.hWnd
        OfName.hInstance = App.hInstance
        OfName.lpstrFilter = "*.*" & Chr(0) & "*.*"
        OfName.lpstrFile = Space(255) & Chr(0)
        OfName.nMaxFile = 256
        OfName.lpstrFileTitle = Space(255) & Chr(0)
        OfName.nMaxFileTitle = 256
        OfName.lpstrTitle = "打开"
        OfName.flags = OFN_LONGNAMES + OFN_PATHMUSTEXIST + OFN_HIDEREADONLY + OFN_OVERWRITEPROMPT + OFN_ALLOWMULTISELECT + OFN_EXPLORER
        
        If GetOpenFileName(OfName) Then
            fName = OfName.lpstrFile        While fName <> ""
                MsgBox Left(fName, InStr(fName, Chr(0)))
                fName = Mid(fName, InStr(fName, Chr(0)) + 1)
            Wend
        End If
    End Sub
      

  3.   

    使用commondialog可以实现楼主的要求,但lihonggen0(李洪根,用.NET,标准答案来了) 的方法不全面,因为楼主需要选取一些文件,我的代码如下:Private Sub Command1_Click()
        On Error Resume Next
        With CommonDialog1
            .CancelError = True
            .Filter = "TextFile(*.txt)|*.txt|AllFile(*.*)|*.*"
            .Flags = cdlOFNAllowMultiselect Or cdlOFNLongNames Or cdlOFNHideReadOnly
            .ShowOpen
            MsgBox "Your selection are " + .FileName, 64, "Select Files"
        End With
    End Sub对于flags可参考一下说明进行设置:   常数                     值          描述 
    1、cdlOFNAllowMultiselect  &H200  它指定文件名列表框允许多重选择。 运行时,通过按 SHIFT 键以及使用 UP ARROW 和 DOWN ARROW 键可选择多个文件。作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开。
     
    2、cdlOFNCreatePrompt      &H2000  当文件不存在时对话框要提示创建文件。该标志自动设置 cdlOFNPathMustExist 和 cdlOFNFileMustExist 标志。 3、cdlOFNExplorer          &H80000 它使用类似资源管理器的打开一个文件的对话框模板。适用于 Windows 95 和 Windows NT 4.0。 4、CdlOFNExtensionDifferent &H400 它指示返回的文件扩展名与 DefaultExt 属性指定的扩展名不一致。如果 DefaultExt 属性是 Null,或者扩展相匹配,或者没有扩展时,此标志不设置。当关闭对话框时,可以检查这个标志的值。 5、cdlOFNFileMustExist       &H1000 它指定只能输入文件名文本框已经存在的文件名。如果该标志被设置,则当用户输入非法的文件名时,要显示一个警告。该标志自动设置cdlOFNPathMustExist 标志。 6、cdlOFNHelpButton &H10 使对话框显示帮助按钮。 7、cdlOFNHideReadOnly &H4 隐藏只读复选框。 8、cdlOFNLongNames &H200000 使用长文件名。 9、cdlOFNNoChangeDir &H8 强制对话框将对话框打开时的目录置成当前目录。 10、CdlOFNNoDereferenceLinks &H100000 不要间接引用外壳链接(也称作快捷方式)。缺省时,选取外壳链接会引起它被外壳间接引用。 11、cdlOFNNoLongNames &H40000 无长文件名。 12、CdlOFNNoReadOnlyReturn &H8000 它指定返回的文件不能具有只读属性,也不能在写保护目录下面。 13、cdlOFNNoValidate &H100 它指定公共对话框允许返回的文件名中含有非法字符。 14、cdlOFNOverwritePrompt &H2 使“另存为”对话框当选择的文件已经存在时应产生一个信息框,用户必须确认是否覆盖该文件。 15、cdlOFNPathMustExist &H800 它指定只能输入有效路径。如果设置该标志,输入非法路径时,应显示一个警告信息。 16、cdlOFNReadOnly &H1 建立对话框时,只读复选框初始化为选定。该标志也指示对话框关闭时只读复选框的状态。 17、cdlOFNShareAware   &H4000    它指定忽略共享冲突错误。