Сдравствуйте!
Делаю я прогу типа Explorer'а слева лежит TreeView и в нем должно быть дерево каталогов.
Подскажите пожалуйста, как сделать дерево из всех каталогов компа?
Заранее благодарен!
Да не думаю что сложнее, наоборот, никакой рекурсии.2. Добавить только корневые папки. При клике на узле добавлять входящие папки. Сложнее, но работает быстро.
Sub drivers()
Dim drivenames As String, thisdrive As String, fld As Folder, drv As Long, _ flds As String
Dim c As Long, i As Long
Dim slength As Long
drivenames = Space(255)
'получаем имена всех дисков
slength = GetLogicalDriveStrings(255, drivenames)
For c = 1 To slength Step 4 '
thisdrive = Mid(drivenames, c, 3)
Set nParent = tvTreeView.Nodes.Add(, , , thisdrive, 1)
drv = GetDriveType(thisdrive)
If drv <> 5 And drv <> 2 Then
Set fld = FSO.GetFolder(thisdrive)
For i = 1 To fld.SubFolders.Count
flds = fld.SubFolders.Item(i).Name'Вот здесь происходит ошибка
tvTreeView.Nodes.Add nParent, , , flds, 2
Next i
End If
Next c
End Sub
Antonariy писал(а):2. Добавить только корневые папки. При клике на узле добавлять входящие папки. Сложнее, но работает быстро.
Не самое лучшее решение, надо сказать - будет медленно работать. Я делал по другому: если нод должен раскрываться (иметь плюсик), то нужно на уровень ниже добавлять всего один нод. При экспандинге нода-родителя нод-потомок удаляется и добавляются нужные потомки...при раскрытии плюса ноды нижнего уровня уже будут присутствовать, а ноды еще одного уровня добавятся
если нод должен раскрываться (иметь плюсик), то нужно на уровень ниже добавлять всего один нод.
При экспандинге нода-родителя нод-потомок удаляется и добавляются нужные потомки...
Sub Drivers()
Dim drivenames As String, thisdrive As String, fld As Folder, drv As Long, _
flds As String, NewN As Node
Dim c As Long, i As Long ' ñ÷åò÷èê
Dim slength As Long
drivenames = Space(255)
slength = GetLogicalDriveStrings(255, drivenames)
For c = 1 To slength Step 4 '
thisdrive = Mid(drivenames, c, 3)
Set nParent = tvTreeView.Nodes.Add(, , , thisdrive, 1)
drv = GetDriveType(thisdrive)
If drv <> 5 And drv <> 2 Then
Set fld = FSO.GetFolder(thisdrive)
For i = 1 To fld.SubFolders.Count
flds = fld.SubFolders.Item(i).Name
Set NewN = tvTreeView.Nodes.Add(nParent, tvwChild, , flds, 2)
Next i
End If
Next c
End Sub
Сейчас этот форум просматривают: AhrefsBot и гости: 61