在使用vb编程,有些时候我们不得不面对需要一次性读取文件夹中某一类型的所有文件,这如何实现咧?
第一种方法是动态加载控件实现文件的读取,代码如下: Private Sub Command1_Click() Dim objDlg //shell对象 Dim objF //文件选择对话框对象 Dim DstPath //文件夹路径 Dim I //临时变量
Set objDlg = CreateObject(\ //加载shell对象
Set objF = objDlg.BrowseForFolder(&H0, \选择存放位置:\ //打开一个浏览文件夹 If InStr(1, TypeName(objF), \ //路径有效则记录路径 DstPath = objF.self.Path Else
MsgBox \目录无效!\ End If
BrowseForFolder的作用就是创建上图所示的文件夹选择对话框,其参数表为:
object.BrowseForFolder Hwnd, Title, Options, [RootFolder] object Hwnd Title Options
用来创建对话框的对象 父窗口的句柄 对话框的标题
一个long类型的值主要的作用是控制对话框显示的格式,具体取值可以参看MSDN中的“BROWSEINFO”
RootFolder 可选项,对话框打开时的位置
Dim flist As FileListBox //控件类型FileListBox Dim lbox As ListBox //控件类型ListBox
?通过Me对象以及Controls集合动态的加载两个控件 Set flist = Me.Controls.Add(\ Set lbox = Me.Controls.Add(“VB.ListBox”, “lb”, Me) With objF ' File1
.Pattern = \ //需要筛选出来的文件类型 .Path = DstPath //文件夹的路径 For i = 0 To .ListCount - 1 //遍历所有指定类型的文件
List1.AddItem DstPath & \ //假设listbox的名称为list1 Next End With
End Sub
这里需要说明一下:
FileListBox控件可以通过.Pattern中指定的文件后缀名,以及.Path指定的文件夹路径,筛选出.Path路径下所有满足条件的文件类型,将文件名全部记录在.List数组中,我们通过一个ListBox控件,将.List 数组中的所有文件全部取出来,通过DstPath & \,记录下文件的全路径 有些时候,我们需要将弹出来的对话框设置成模态的对话框以限制用户的一些操作,但是一般使用BrowseForFolder得到的都是非模态的对话框,那么有没有实现呢?肯定是可以的,一般我们是用BrowseForFolder的时候总是习惯性的将Hwnd这个参数设置成0,这样得到的就是一个非模态的文件夹选择对话框。如果将Hwnd设置成对应的父窗口的句柄的话,我们就可以得到一个模态的对话框了。
第二种方法则是自己添加控件完成,文件夹选择的操作,这种方法有两种思路,一种是利用VB的空间DirListBox以及DriveListBox两个控件如图
?确定按钮
Private Sub Command1_Click() '打开一个目录
2
Dim flb As FileListBox '动态FileListBox控件 Dim lb As ListBox '动态ListBox控件
Dim i '中间变量
fPath = Dir1.path
Set flb = Me.Controls.Add(\ Set lb = Me.Controls.Add(\
'获取文件下所有满足要求的.gxk文件的集合 With flb
.Pattern = \ .path = fPath
For i = 0 To .ListCount - 1
lb.AddItem fPath & \ '假设listbox的名称为list1,请根据实际修改 Next i End With
Set fList = lb
Me.Hide '隐藏对话框 End Sub
?取消按钮
Private Sub Command2_Click() Unload Me End Sub
?DriveListBox空间中选取的磁盘发生变化 Private Sub Drive1_Change() Dir1.path = Drive1.Drive End Sub
?窗体加载
Private Sub Form_Load() Dim x As Long Dim y As Long x = Screen.Width y = Screen.Height
X1 = (x - Me.Width) / 2 Y1 = (y - Me.Height) / 2 Me.Move X1, Y1 End Sub
3
另外一种方法就是添加Tree控件,默认的控件中没有TreeView控件,需要我们从工程菜单下面的部件中引用如图:
对ImageList的属性进行设置,添加两个我们需要用到的图标,并设置其大小尺寸:
4
在设置树控件的时候 需要添加的四个参数分别是
1,节点 2,该节点与要添加节点的关系 3,标示符 4,显示信息 5, 图标 Private Sub Form_Load()
TreeView1.LineStyle = tvwTreeLines TreeView1.ImageList = ImageList1
TreeView1.Style = tvwTreelinesPlusMinusPictureText TreeView1.Nodes.Add , , \本地磁盘 C:\ TreeView1.Nodes.Add , , \本地磁盘 D:\ TreeView1.Nodes.Add , , \本地磁盘 E:\End Sub
Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node) Node.ExpandedImage = 2 End Sub
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
Dim fPath As String '父文件名 Dim sPath As String '子文件名 Dim i
Set chdDir = Controls.Add(\ chdDir.Path = Node.Key fPath = Node.Key
With chdDir
Dim name As String '记录子文件名 For i = 0 To .ListCount - 1 Dim x, y
sPath = .List(i) x = sPath y = \
Do While InStr(x, \ x = Split(x, \ y = y + x(0) x = x(1) Loop
name = x
TreeView1.Nodes.Add fPath, tvwChild, sPath, name, 2 Next End With
Node.Expanded = True
Me.Controls.Remove (\End Sub
5