用通用对话框的flags属性=cdlOFNAllowMultiselect是可以的,但是那个文件对话框也太不好看了,而且返回的多个文件名是用空格隔开的,怎么实现象类似excel那样的文件打开对话框,可以选多个文件。

解决方案 »

  1.   

    有没有更简单的,象excel那样的
      

  2.   

    http://blog.csdn.net/northwolves/archive/2005/08/30/468251.aspxflags:
    cdlOFNExplorer &H80000 
    它使用类似资源管理器的打开一个文件的对话框模板。适用于 Windows 95 和 Windows NT 4.0。
     
    cdlOFNAllowMultiselect &H200 
    它指定文件名列表框允许多重选择。 
    运行时,通过按 SHIFT 键以及使用 UP ARROW 和 DOWN ARROW 键可选择多个文件。作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开
     Private Sub Command1_Click()
    Dim i As Integer, title As String, FileNames As String
      With CommonDialog1
          .FileName = ""
          .Filter = "All Files|*.*"    '过滤器指定在对话框的文件列表框中显示的文件的类型
          .Flags = &H80200 '允许多重选择。'!!!!!!!!!!!
          .Action = 1
    '       i = InStrRev(.FileName, "\") '
    '       title = Left(.FileName, i) ' 目录
    '     FileNames = Mid(.FileName, i + 1) ' all selectes files
    '  End With
    '   FileNames = Replace(FileNames, Chr(32), vbCrLf)
    '   MsgBox FileNames, vbYesNo, title  '显示对话框
        End Sub
      

  3.   

    另外,我是用的win2000,那cdlOFNExplorer 是不是就没什么用啊?
      

  4.   

    Private Sub Command1_Click()
        Dim i As Integer, title As String, FileNames As String
        
        ComDialogFax.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer Or cdlOFNLongNames
        ComDialogFax.Filter = "All Excel Files (*.xls)|*.xls|All files (*.*)|*.*"
        ComDialogFax.FilterIndex = 1
        ComDialogFax.InitDir = "C:\"
        ComDialogFax.FileName = ""
        ComDialogFax.CancelError = False
        ComDialogFax.ShowOpen
        
        i = InStrRev(ComDialogFax.FileName, "\") '
        title = Left(ComDialogFax.FileName, i) ' Ä¿Â¼
        FileNames = Mid(ComDialogFax.FileName, i + 1) ' all selectes files
        Do While Len(FileNames) > 0
            title = GetLeftWords(FileNames, Chr(0))
            MsgBox title
        Loop
    End SubFunction GetLeftWords(s As String, ByVal Ch As String) As String
        Dim i As Long
        i = InStr(s, Ch)
        If i > 0 Then
            GetLeftWords = Left(s, i - 1)
            s = Mid(s, i + Len(Ch))
        Else
            GetLeftWords = s
            s = vbNullString
        End If
    End Function