Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
Boss IT
-
- Обычный пользователь
-
-
- Сообщения: 62
- Зарегистрирован: 01.07.2005 (Пт) 21:23
- Откуда: Челябинск city
-
Boss IT » 04.10.2005 (Вт) 17:04
Так, вообщем есть 3 папки:
test1
test2
test3
В любой из этиз папок находиться N папок, а в каждой из N папок находиться N файлов.
Вопрос: как узанть количество папок например в test1 и построить дерево:
test1
--test11
--test12
--test13
--test14
Заранее благодарен
-
Ruslan Demidow
-
- Мужчина!
-
-
- Сообщения: 987
- Зарегистрирован: 25.03.2004 (Чт) 13:39
- Откуда: N.Novgorod
-
Ruslan Demidow » 04.10.2005 (Вт) 23:24
- Код: Выделить всё
Private Const TVI_ROOT As Long = -&H10000
Private Const TVIF_CHILDREN As Long = &H40
Option Explicit
'Объявляем объект файловой системы
Private FSO As Object
'Объявим переменную, в которой будет храниться текущий
'родительский узел дерева
Private RootNode As Node
Private Sub CreateTreeView(ByVal sPath As String)
'Очистим дерево
TV1.Nodes.Clear
'создадим самый верхний узел дерева
Set RootNode = TV1.Nodes.Add(, , "Root", "Root")
'вызовем процедуру построения дерева подкаталогов
'в каталоге sPath
AddTree sPath, RootNode.Key
End Sub
Sub AddTree(ByVal sPath As String, ByVal sRootNode As String)
'Параметр sPath - путь для которого нужно построить дерево
'Параметр sRootNode - ключ узла дерева, который на данный
'момент является родительским (т.е. для которого добавляем
'подчинённые узлы
'Объявим статическую переменну, которая будет с каждым
'вызовом данной процедуры увеличиваться на единицу.
'сделано для того, чтобы все ключи у узлов были уникальными
Static lKey As Long
'fldr - переменная которая будет содержать объект типа каталог
'fls - переменная, которая будет содержать коллекцию файлов
'находящихся в каталоге fldr
'f - переменная которая будет содержать объект типа файл
'fldrs - переменная, которая будет содержать коллекцию подкаталогов папки fldr
'sfldr - переменная, которая будет содержать объект типа папка (folder)
'n - переменная, которая будет содержать объект типа узел дерева (node)
'rNode - переменная, которая будет содержать объект типа узел дерева -
'в данной переменной будет храниться текущий родительский узел, для которого
'будут добавляться дочерние узлы
Dim fldr, fls, f, fldrs, sfldr
Dim n As Node
Dim rNode As Node
'Установим текущим узел с ключом sRootNode
Set rNode = TV1.Nodes(sRootNode)
'увеличим значение lKey на единицу
lKey = lKey + 1
'получим каталог (папку) указанную в SPath
Set fldr = FSO.getfolder(sPath)
'получим коллекцию подкаталогов папки fldr
Set fldrs = fldr.subfolders
'если у папки fldr количество подкаталогов >0 тогда
If fldrs.Count > 0 Then
'для каждого подкаталога (sfldr) в коллекции подкаталогов (fldrs)
For Each sfldr In fldrs
'добавим новый узел с ключом sfldr.Name & "_" & Str(lKey),
' текст назначим sfldr.Name
'укажем что это дочерний узел (TVGN_CHILD),
'и скажем что этот новый узел подчинён rNode (см. выше)
Set n = TV1.Nodes.Add(rNode, TVGN_CHILD, sfldr.Name & "_" & Str(lKey), sfldr.Name)
'для каждого файла (f) в коллекции файлов каталога sfldr (коллекция - sfldr.files)
For Each f In sfldr.Files
'на всякий случай.
On Error Resume Next
'добавим новый узел (файл)
'первый параметр указывает на то что, этот добавляемый узел будет потомком (подчинён)
'узлу n (см. выше), TVGN_CHILD - указывает на то, что добавляемый узел - это потомок.
'f.Name & "_" & Str(lKey) - уникальный ключ нового узла,
'f.Name - текст в названии узла в дереве
TV1.Nodes.Add n, TVGN_CHILD, f.Name & "_" & Str(lKey), f.Name
Next
'вставим прерывание на обработку событий, чтобы программа не зависала
'во время построения дерева
DoEvents
'и вот самое интересное:
'для текущего подкаталога вызовем из этой функции - опять её же.
'Сделаем рекурсивный вызов. Таким образом мы пройдём по все подкаталогам
'начального каталога.
AddTree sfldr, n.Key
Next
End If
End Sub
Private Sub Command1_Click()
lblStatus = "Строим дерево..."
'построим дерево
CreateTreeView Text1.Text
lblStatus = vbNullString
End Sub
Private Sub Form_Load()
'Создадим объект файловой системы
Set FSO = CreateObject("Scripting.FileSystemObject")
End Sub
Это Ж-ж-ж-ж неспроста (с) Винни-Пух
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 94