Надо постоить дерево...

Программирование на 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 (Вт) 21:38

Вот для примера. Дальше думаю сам дойдёшь. ;)
Вложения
TreeView.rar
Построение дерева
(1.9 Кб) Скачиваний: 34
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

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

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 128

    TopList