- Một thanh cuộn (ComboBox) tên cbDisc : chứa danh sách các ổ đĩa của máy tính.
- Môt khung hiển thị dạng cây : khi ta chọn một ổ đĩa trong danh sách cuộn phía trên, khung này sẽ hiển thị các thư mục của ổ đĩa vừa được chọn.
Dưới đây là mã nguồn của hộp thoại trên :
Option Explicit Private Sub cbDisc_Change() Call PopulateTreeViewFolder End Sub Private Sub UserForm_Initialize() Call PopulateDiscList End Sub Sub PopulateDiscList() Dim objDrv As Object cbDisc.Clear ' get a list of all disc in PC For Each objDrv In CreateObject("Scripting.FileSystemObject").drives ' add disc path to combobox cbDisc cbDisc.AddItem objDrv.Path Next Set objDrv = Nothing ' assign a default value for combobox cbDisc cbDisc.Value = cbDisc.Column(0, 0) End Sub Private Sub UserForm_Terminate() Unload Me End Sub Sub PopulateTreeViewFolder() Dim Dir As String Dir = cbDisc.Value ' clear all nodes in TreeView before adding to it TreeViewFolder.Nodes.Clear If Dir <> "" Then ' add node root first TreeViewFolder.Nodes.Add , , Dir, Dir ' call a recursive function upto 2 level of subfolder Call AddToTree(Dir, 2) End If With TreeViewFolder.Nodes If .Count > 0 Then ' expand the root node by default .Item(1).Expanded = True End If End With End Sub Sub AddToTree(Dir As String, level As Integer) ' if level equals 0, exit function If level = 0 Then Exit Sub End If Dim objFso As Object Dim oFolder As Object Set objFso = CreateObject("Scripting.FileSystemObject") On Error GoTo errorHandler For Each oFolder In objFso.GetFolder(Dir & "\").SubFolders TreeViewFolder.Nodes.Add Dir, 4, oFolder.Path, oFolder.Name ' call recursive function AddToTree to add all subfolders to this folder Call AddToTree(oFolder.Path, level - 1) Next Set objFso = Nothing Set oFolder = Nothing Exit Sub errorHandler: Set objFso = Nothing Set oFolder = Nothing End SubGiải thích mã :
- Khi hộp thoại hiển thị, hàm UserForm_Initialize() sẽ gọi hàm PopulateDiscList để tạo lập danh sách ổ đĩa hiển thị trong thanh cuộn cbDisc.
- Thanh cuộn được gán giá trị mặc định là ổ đĩa đầu tiên trong danh sách, và hàm cbDisc_Change() được gọi.
- Hàm PopulateTreeViewFolder được gọi để cập nhật nội dung của Khung hiển thị hình cây. Trong ví dụ, ta chỉ hiển thị thư mục con đến tầng thứ hai : level được gán giá trị 2 khi gọi hàm AddToTree. AddToTree là hàm đệ quy.
Không có nhận xét nào:
Đăng nhận xét