VB 用CommonDialog选择打开多个文件实例

VB 用CommonDialog选择打开多个文件实例,第1张

概述在Visual Basic中,通常用CommonDialog公共对话框来选择磁盘上的文件,在其Flags属性中加上cdlOFNAllowMultiselect风格后,就允许选择多个文件。当只选择一个文件时,其文件名(包含路径)直接返回Filename属性,那么选择多个文件时呢? 如果选择了多个文件,则Filename属性返回值格式为”路径_文件名1_文件名2_…”(_为字符Chr$(0))。举一个 在Visual Basic中,通常用CommonDialog公共对话框来选择磁盘上的文件,在其Flags属性中加上cdlOFNAllowMultiselect风格后,就允许选择多个文件。当只选择一个文件时,其文件名(包含路径)直接返回filename属性,那么选择多个文件时呢?
如果选择了多个文件,则filename属性返回值格式为”路径_文件名1_文件名2_…”(_为字符Chr$(0))。举一个例子,如果我们选择C:.txt文件,那么filename=”C:.txt”;而同时选择了C:.txt和C:.txt两个文件后,则filename=”C:\ 1.txt 2.txt”。我们要获取所选择文件的文件名,就必须对filename字符串进行分离。
分离的思路大致如下:先得到所选择文件的路径,然后将其从filename字符串中去除,这样就只剩下了文件名。而这些文件名又有字符Chr$(0)分隔,剩下的就很好办了,即便文件名中有空格(Chr$(32)),也能正确的实现分离。

所以,现在关键的问题是如何获取所选择文件的路径。VB中有一个内建的函数CurDir(),它能返回当前的路径。在CommonDialog中改变路径会产生PathChange事件,这也将同时改变CurDir()函数的值,使其始终指向被选择的路径。因此,我们使用CruDir()函数就能正确得到所选择文件的路径。但要注意,这个 *** 作必须在下次PathChange事件发生之前调用,否则其值会随之而改变。建议在CommonDialog的ShowOpen方法之后立即调用。
同时需要注意的是,用CurDir()函数获取路径时,如果是根目录,则最后一个字符为“\”,不是根目录时则没有。例如,如果当前的路径为C:\,那么CurDir()=”C:\”;而当前路径为C:\Pwin95时,CurDir()=”C:\Pwin95”,这就需要在程序中加以区别。
下面就是实现的过程。
1. 先新建一个工程
2. 从菜单“工程/添加模块”中添加一个新模块Moudle1,并在模块中输入如下代码:
Option Explicit

Type DlgfileInfo
iCount As Long
sPath As String
sfile() As String
End Type
'功能:返回CommonDialog所选择的文件数量、路径和文件名
'参数说明:strfilename为CommonDialog的filename属性
'函数类型:DlgfileInfo。这是一个自定义类型,其中iCount返回所选择文件的个数,sPath返回所选
‘ 择文件的路径,sfile()返回所选择文件的文件名(不包括路径)
'注意事项:该函数应在CommonDialog.ShowOpen方法后立即使用,以免当前路径被更改
Public Function GetDlgfileInfo(strfilename As String) As DlgfileInfo

Dim sPath,tmpStr As String
Dim sfile() As String
Dim iCount As Integer

Dim I As Integer


On Error GoTo ErrHandle

sPath = CurDir()
tmpStr = Right$(strfilename,Len(strfilename) - Len(sPath)) '将文件名与路径分离

If left$(tmpStr,1) = Chr$(0) Then

'选择了多个文件(分离后第一个字符为Chr$(0))
For I = 1 To Len(tmpStr)
If MID$(tmpStr,I,123)">iCount = iCount + 1
ReDim Preserve sfile(iCount)
Else
sfile(iCount) = sfile(iCount) & MID$(tmpStr,1)
End If
Next I
'只选择了一个文件(注意:根目录下的文件名除去路径后左边没有"\")
iCount = 1

sfile(iCount) = tmpStr
GetDlgfileInfo.iCount = iCount
ReDim GetDlgfileInfo.sfile(iCount)
If Right$(sPath,1) <> "\" Then sPath = sPath & "\"
GetDlgfileInfo.sPath = sPath
For I = 1 To iCount
GetDlgfileInfo.sfile(I) = sfile(I)
Exit Function

ErrHandle:
MsgBox "GetDlgfileInfo函数执行错误!",vbOKOnly + vbCritical,"自定义函数错误"
End Function
这样,我们就生成了一个能实现获取CommonDialog所选择文件信息的函数GetDlgfileInfo,可以在程序中方便的调用。
3.在窗体上放置一个列表框List1,一个个按钮Command1,一个标示框Label1和一个公共对话框CommonDialog1(这需要先在菜单“工程/部件”中标记“Microsoft Common Dialog Control 5.0”控件),并设置如下属性:Label1.autoSize=True、Label1.Caption=”选择的文件:”、Command1.Caption=”选择文件”。具体布局如图:
在Command1_Click事件中添加代码:
Private Sub Command1_Click()
Dim Dlginfo As DlgfileInfo
Dim I As Integer
'清除List1中的项
List1.Clear
'选择文件
With CommonDialog1
.CancelError = True
.MaxfileSize = 32767 '被打开的文件名尺寸设置为最大,即32K
.Flags = cdlOFNHIDeReadonly Or cdlOFNAllowMultiselect Or cdlOFNExplorer
.DialogTitle = "选择文件"
.Filter = "所有类型的文件(*.*)|*.*"
.ShowOpen
Dlginfo = GetDlgfileInfo(.filename)
End With
For I = 1 To Dlginfo.iCount
List1.AddItem Dlginfo.sPath & Dlginfo.sfile(I)
Exit Sub
' 按了“取消”按钮
End Sub
好了,运行工程试一试,效果怎么样?
你也可以将模块文件(*.bas)添加到你自己的工程中,这样你也能在你自己的程序中调用GetDlgfileInfo函数来实现用CommonDialog选取多个文件的功能了!
(以上的程序均在P133+64M+Pwin95 OSR2+VB5简体中文专业版中调试通过。

总结

以上是内存溢出为你收集整理的VB 用CommonDialog选择打开多个文件实例全部内容,希望文章能够帮你解决VB 用CommonDialog选择打开多个文件实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1281042.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存