如何用CommonDialog选择多个文件

Wind_LQ 2002-01-25 11:37:28
CommDialog.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNFileMustExist + cdlOFNHideReadOnly
CommDialog.ShowOpen

我的代码就是这样了,当选中多个文件的时候就只返回一个路径而没有文件名
还有就是如果是长文件名又是用空格间隔的怎么办?
...全文
421 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Arcan 2002-01-28
  • 打赏
  • 举报
回复
放分呀,呵呵。
Wind_LQ 2002-01-28
  • 打赏
  • 举报
回复
你的代码比我简洁多了,我不清楚split的用法。
Wind_LQ 2002-01-28
  • 打赏
  • 举报
回复
to:seabluesky(蓝色星空)
我已经做出来了,不过还是要谢谢你。
seabluesky 2002-01-27
  • 打赏
  • 举报
回复
上面一个有误!
Private Function GetFiles(Filenames() as string,Filter AS String) as string
Dim I As Integer
Dim Y As Integer
Dim Z As Integer
Dim FileName as string

CommonDialog1.filename = ""
CommonDialog1.Filter = Filter
CommonDialog1.Flags = cdlOFNAllowMultiselect + cdlOFNExplorer + cdlOFNFileMustExist + cdlOFNHideReadOnly
Commondialog1.ShowOpen
filename=commondialog1.filename
if instr(filename,chr(0))=0 then '如果只选择了一个文件就返回这个文件名
getfiles=filename
exit function
end if
filenames=split(filename,chr(0)) 'filenames(0)内内容为路径名,filenames(1)为第一个文件名(不包含路径),filenames(2)为第二个文件名,……
getfiles=iif(right(filenames(0)),1) = "\" ,filenames(0),filenames(0) & "\") & filenames(1)'返回第一个文件名
End Function
seabluesky 2002-01-27
  • 打赏
  • 举报
回复
Private Function GetFiles(Filenames() as string) as string
Dim I As Integer
Dim Y As Integer
Dim Z As Integer
Dim FileName as string

CommonDialog1.filename = ""
CommonDialog1.Filter = "All Files¦*.*"
CommonDialog1.Flags = &H200 + &H8
filename=commondialog1.filename
if instr(filename,chr(0))=0 then '如果只选择了一个文件就返回这个文件名
getfiles=filename
exit function
end if
filenames=split(filename,chr(0)) 'filenames(0)内内容为路径名,filenames(1)为第一个文件名(不包含路径),filenames(2)为第二个文件名,……
getfiles=iif(right(filenames(0)),1) = "\" ,filenames(0),filenames(0) & "\") & filenames(1)'返回第一个文件名
End Function
woos 2002-01-27
  • 打赏
  • 举报
回复
commondialog.flags=cdlOFNAllowMultiselect
(or use constance &H200 )
iwzw 2002-01-27
  • 打赏
  • 举报
回复
真的?
woookaooo 2002-01-26
  • 打赏
  • 举报
回复
学习学习!
fuxc 2002-01-26
  • 打赏
  • 举报
回复
不行!文件名也含空格的,明天到单位试了再说吧.
fuxc 2002-01-26
  • 打赏
  • 举报
回复
长文件名可以包含空格的,这到是个问题
每提取一个用dir判断一下? 逻辑也不是很严密,假如一个文件路径中含文件夹"aaa bbb",同时又有一个文件叫"aaa",那还是出错.

我看还是取文件名(不含路径),然后根据文件名去instr,每找到一个就用替换字符串函数去掉,电脑前天刚崩掉,vb还没装,提供格思路吧!
Arcan 2002-01-26
  • 打赏
  • 举报
回复
给分吧,我曾经做过的,很简单的。

当接受长文件名的时候,分隔符用的不是空格,而是chr(0)。我当初可是摸索了半天才发现的。

哈哈,50分耶,赚到了。
Wind_LQ 2002-01-26
  • 打赏
  • 举报
回复
找到一段代码,可以实现。

研究中……
Wind_LQ 2002-01-26
  • 打赏
  • 举报
回复
to:wjq(b_wind)
对啊,刚开始的时候也是弹出16位的(就是那种土土的对话框,不支持长文件名),所以我又加上了cdlOFNExplorer这个标志,现在我选中多个文件的时候文件名就会用“”引起来。而且在FileName属性中没有返回。

头痛中,难道真的要我自己做一个对话框?
wjq 2002-01-26
  • 打赏
  • 举报
回复
过去我也遇到过相同问题,只是我是调用API的.我发现,长文件名会被""引起来.而短文件名没有.

还有个问题,我用API选在多个文件时,它显示的是16位版的对话框.?!
Wind_LQ 2002-01-26
  • 打赏
  • 举报
回复
关键问题是如果选中多个文件,FileName中返回的是路径而没有没有文件名。如果有文件名即使是长文件名,我哪怕用笨办法FileExist来一个个判断也成。
Mike_sun 2002-01-25
  • 打赏
  • 举报
回复
cdlOFNAllowMultiselect &H200

Specifies that the File Namelist box allows multiple selections.
The user can select more than one file atrun time by pressing the SHIFT key and using the UP ARROW and DOWN ARROW keys to select the desired files. When this is done, the FileName property returns a string containing the names of all selected files. The names in the string are delimited by spaces.
hand2001 2002-01-25
  • 打赏
  • 举报
回复
将Flags属性设定为 cdlOFNAllowMultiselect,即可允许选择多个文件。
所有文件名都保存在FileName这个简单字符型属性中,文件名之间用空格分开,用Split函数既可提取
phoenix96_2000 2002-01-25
  • 打赏
  • 举报
回复
为 了 使 程 序 能 够 针 对 用 户 所 选 择 的 文 件 进 行 工 作, 需 要 从 控 件 的Filename 属 性 中 提 取 每 个 文 件 的 名 称。 所 有 被 用 户 选 中 的 文 件 名 称 都 被 作 为 一 个 长 字 符 串 而 存 储 在 该 属 性 中。 每 个 文 件 名 称 之 间 被 一 个 空 格 字 符 分 开。

可以使用InStr 函 数 来 搜 索 分 界 的 空 格 字 符 以 从 公 共 对 话 框 的Filename 属 性 中 提 取 每 个 文 件 名 称。 该InStr 函 数 返 回 在Filename 属 性 字 符 串 中 空 格 字 符 的 位 置。 得 到 空 格 字 符 的 位 置 后, 就 可 以 使 用Mid 函 数 来 将 独 立 的 文 件 名 称 从 该 字 符 串 中 移 出。



Private Sub Command1_Click()
Dim I As Integer
Dim Y As Integer
Dim Z As Integer
Dim FileNames$()

Const OFN_ALLOWMULTISELECT = &H200&

CommonDialog1.filename = ""
CommonDialog1.Filter = "All Files|*.*"
CommonDialog1.Flags = OFN_ALLOWMULTISELECT
CommonDialog1.Action = 1

CommonDialog1.filename = CommonDialog1.filename & Chr(32)

Z = 1
For I = 1 To Len(CommonDialog1.filename)
I = InStr(Z, CommonDialog1.filename, Chr(32))
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
Text1.Text = FileNames(0)
Else
Text2.Text = ""
For I = 0 To Y - 1
If I = 0 Then
Text1.Text = FileNames(I)
Else
Text2.Text = Text2.Text & UCase(FileNames(I))
& Chr$(13) & Chr$(10)
End If
Next
End If
End Sub

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧