CommonDialog控件取多个文件时为什么只有路径而没有路径名

求教:CommonDialog控件取多个文件时为什么只有路径而没有路径名?
本帖最后由 hodrag 于 2014-05-11 22:49:26 编辑
Private Sub Command1_Click()
    Dim i As Integer
    Dim y As Integer
    Dim z As Integer
    Dim filenames$()
    
    CommonDialog1.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer
    CommonDialog1.FileName = ""
    CommonDialog1.Filter = "TXT文件(*.TXT)|*.TXT|所有文件(*.*)|*.*"
    CommonDialog1.InitDir = "D:\"
    CommonDialog1.Action = 1

    CommonDialog1.FileName = CommonDialog1.FileName & Chr(0)

     z = 1
     For i = 1 To Len(CommonDialog1.FileName)
     i = InStr(z, CommonDialog1.FileName, Chr(0))
     If i = 0 Then Exit For
     ReDim Preserve filenames(y)
     filenames(y) = Mid(CommonDialog1.FileName, z, i - z)
     z = i + 1
     y = y + 1
     Next
     
     If y = 1 Then
     List1.AddItem filenames(0)
     Else
     For i = 0 To y - 1
     If i > 0 Then
     filenames(i) = filenames(0)  '+ "\" + filenames(i)
     List1.AddItem filenames(i)
     End If
     Next
     End If
End Sub

代码中如果不加上注释部分,那么list1里只显示路径而没有路径名,不明白是怎么回事
------解决方案--------------------

filenames = Split(CommonDialog1.FileName, Chr(0))
代替你的循环
------解决方案--------------------
需要加上注释掉的部分。在多选的情况下,第一个记录是路径,其他才是所选的文件名。见下例:

Dim temp() As String, i As Long
CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer
CommonDialog1.Filter = "(*.JPG)
------解决方案--------------------
*.JPG
------解决方案--------------------
(*.Bmp)
------解决方案--------------------
*.Bmp
------解决方案--------------------
(*.Gif)
------解决方案--------------------
*.Gif"
CommonDialog1.FileName = ""
CommonDialog1.ShowOpen
If CommonDialog1.FileName = "" Then Exit Sub

If InStr(1, CommonDialog1.FileName, Chr(0)) = 0 Then ‘选择了1 个文件
    lstPic1.AddItem CommonDialog1.FileName
Else ‘选择了多个文件
    temp = Split(CommonDialog1.FileName, Chr(0))
    For i = 1 To UBound(temp)
        lstPic1.AddItem temp(0) & "\" & temp(i)
    Next i
End If