当前位置:学海荡舟 -> 电脑乐园 -> 打开对话框中选多文件




  趣 味 程 序
--趣味程序源码注解--打开对话框中选多文件--

  默认情况下,使用通用对话框打开文件时,我们同时只能选中一个文件,而很多流行的软件都支持同时选择多个文件(象WORD、WINAMP等)。其实对通用对话框的属性稍做改变,也能实现同样的效果,下面我们一起来做一下。

  为了学习方便,提供的源码已经作了详细的中文注释,看看源码框中的代码:


(源程序下载)

  我们先将公共对话框控件的Flags属性设置为常量值cdlOFNAllowMultiselect,这样就使用户能够同时选择几个文件。可以通过在按住ctrl键的同时单击每个文件名称来选中多个文件,这些被选中的文件名称将被高亮。Flags属性还有许多的设置常量,你可以参考下面列表:

常数 描述
cdlOFNAllowMultiselect &H200 使文件名列表框允许多重选择。运行时,通过按 SHIFT 键以及使用UP ARROW 和 DOWN ARROW 键可选择多个文件。作完此操作后,FileName 属性就返回一个包含全部所选文件名的字符串。串中各文件名用空格隔开。
cdlOFNCreatePrompt &H2000 当文件不存在时对话框要提示创建文件。该标志自动设置cdlOFNPathMustExist 和 cdlOFNFileMustExist 标志。
cdlOFNExplorer &H80000 它使用类似资源管理器的打开一个文件的对话框模板。适用于 Windows 95 和 Windows NT 4.0。
cdlOFNExtensionDifferent &H400 它指示返回的文件扩展名与 DefaultExt 属性指定的扩展名不一致。如果 DefaultExt 属性是 Null,或者扩展相匹配,或者没有扩展时,此标志不设置。当关闭对话框时,可以检查这个标志的值。
cdlOFNFileMustExist &H1000 它指定只能输入文件名文本框已经存在的文件名。如果该标志被设置,则当用户输入非法的文件名时,要显示一个警告。该标志自动设置 cdlOFNPathMustExist 标志。
cdlOFNHelpButton &H10 使对话框显示帮助按钮
cdlOFNHideReadOnly &H4 隐藏只读复选框
cdlOFNLongNames &H200000 使用长文件名
cdlOFNNoChangeDir &H8 强制对话框将对话框打开时的目录置成当前目录
cdlOFNNoDereferencelinks &H100000 不要间接引用外壳链接(也称作快捷方式)。缺省时,选取外壳链接会引起它被外壳间接引用
cdlOFNNoLongNames &H40000 无长文件名
cdlOFNNoReadOnlyReturn &H8000 它指定返回的文件不能具有只读属性,也不能在写保护目录下面
cdlOFNNoValidate &H100 它指定公共对话框允许返回的文件名中含有非法字符
cdlOFNOverwritePrompt &H2 使“另存为”对话框当选择的文件已经存在时应产生一个信息框,用户必须确认是否覆盖该文件
cdlOFNPathMustExist &H800 它指定只能输入有效路径。如果设置该标志,输入非法路径时,应显示一个警告信息
cdlOFNReadOnly &H1 建立对话框时,只读复选框初始化为选定。该标志也指示对话框关闭时只读复选框的状态
cdlOFNShareAware &H4000 它指定忽略共享冲突错误

  现在我们要解决关键的问题,怎样把选中文件的信息取回到程序中,加以利用。允许选择多文件后,CommonDialog控件返回的Filename是按以下格式的一个字符串:

  文件路径 文件名1 文件名2 文件名3 ...

  而如果要打开某个文件,我们需要的是该文件的完整路径,也就是“文件路径+文件名”格式,所以必须通过对字符串的操作把完整的文件名分离出来,方法如下:

 1、先把返回的字符串按空格分割放在FileNames数组中
 For I = 1 To Len(CommonDialog1.FileName)
  'InStr函数,返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置。
  '语法 InStr(起点位置, string1, string2)
  I = InStr(Z, CommonDialog1.FileName, Chr(32))
  If I = 0 Then Exit Sub
  ReDim Preserve FileNames(Y)
  'Mid函数,返回 Variant (String),其中包含字符串中指定数量的字符。
  '语法 Mid(string, start[, length])
  FileNames(Y) = Mid(CommonDialog1.FileName, Z, I - Z)
  Z = I + 1
  Y = Y + 1
 Next I

 2、如果文件个数为多个,将“路径”+“\”+“文件名”后作为完整的文件名
 For I=1 To Len(CommonDialog1.FileName)
  FileNames(I)=FileNames(0) & "\" & FileNames(I)
 Next I

  通过上面的处理,FileNames数组中存放的就是我们可以直接使用的完整文件路径了,本例中我们是把它们读出显示在列表框中。

相关链接:   看实例学VB