!! TreeView !!

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

!! TreeView !!

Сообщение kroskros » 13.06.2006 (Вт) 13:11

Я че совсем туплю???

Продолжаю битву с деревом (TreeView сиречь)
Создал я его, краССССива так создал,
на ноды развесил текстовые теги (Nodes.tag = "функционал ноды")

а теперь хочу не многого (как мне кажется),
а именно, чтобы можно было разворачивать дерево по нодам
с определенным функционалом (ну, т.е. только те ноды,
тег которых соответствует заданной строке)

вопрос:
И ЧЕ? И КАК????
КАК мне перебрать всю коллекцию нод дерева,
имея в виду, что уровень вложенности нод доходит до 4???
/в этом месте тихая истерика прямо... :(/

Мои наивные попытки перебрать ноды:

For each Node as TreeNodes in MyTree.nodes
if Node.tag = "трам-пам-пам" then node.expand
End if

разбились о то, что перебираются ноды только 1-го уровня
/нет, как я понимаю, ноды 2- и ниже уровней
являются членами коллекций не дерева, а нод 1-го уровня и далее.../
но не могу же я перебирать ноды, как
myTree.Nodes.Nodes.Nodes
Вернее технически-то могу, но...
а особенно учитывая, что вложенность нод разная :(
может мне кто-нить чего-нить посоветует,
чего я не так делаю?
Max

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 13.06.2006 (Вт) 13:16

рекурсия тебе поможет

temur
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.02.2005 (Чт) 21:17
Откуда: Georgia

Сообщение temur » 13.06.2006 (Вт) 14:32

Можно так сделать обход до 10 уровня

Код: Выделить всё
Dim c0 As TreeNode
        Dim c1 As TreeNode
        Dim c2 As TreeNode
        Dim c3 As TreeNode
        Dim c4 As TreeNode
        Dim c5 As TreeNode
        Dim c6 As TreeNode
        Dim c7 As TreeNode
        Dim c8 As TreeNode
        Dim c9 As TreeNode

        For Each c0 In Me.TreeView1.Nodes
            TEMPSTR = c0.FullPath
            For Each c1 In c0.Nodes
                TEMPSTR = TEMPSTR & "~" & c1.FullPath
                For Each c2 In c1.Nodes
                    TEMPSTR = TEMPSTR & "~" & c2.FullPath
                    For Each c3 In c2.Nodes
                        TEMPSTR = TEMPSTR & "~" & c3.FullPath
                        For Each c4 In c3.Nodes
                            TEMPSTR = TEMPSTR & "~" & c4.FullPath
                            For Each c5 In c4.Nodes
                                TEMPSTR = TEMPSTR & "~" & c5.FullPath
                                For Each c6 In c5.Nodes
                                    TEMPSTR = TEMPSTR & "~" & c6.FullPath
                                    For Each c7 In c6.Nodes
                                        TEMPSTR = TEMPSTR & "~" & c7.FullPath
                                        For Each c8 In c7.Nodes
                                            TEMPSTR = TEMPSTR & "~" & c8.FullPath
                                            For Each c9 In c8.Nodes
                                                TEMPSTR = TEMPSTR & "~" & c9.FullPath
                                            Next
                                        Next
                                    Next
                                Next
                            Next
                        Next
                    Next
                Next
            Next
        Next

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.06.2006 (Вт) 14:37

temur
Прочитай пост, предшествующий твоему.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

temur
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.02.2005 (Чт) 21:17
Откуда: Georgia

Сообщение temur » 13.06.2006 (Вт) 14:43

Если он хочет обойти Ноды циклами вот ему пример.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.06.2006 (Вт) 14:46

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 13.06.2006 (Вт) 18:07

"рекурсия тебе в помощь!!!"
надо запомнить и как-нить блеснуть на светском рауте... ;)

Видимо так и придется..
но обидно-то как что низзя этого сделать встроеными методами...
все-так чей-то тут у них не продумано. ;)

спасибо, я постарюсь.. ))
Max

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 13.06.2006 (Вт) 18:54

А рекурсия это какой-то невстроенный метод???
Процедура перебирает ноды уровня 1 и для кого надо пускает перебирать ноды уровня +1

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.06.2006 (Ср) 3:50

GAGArin писал(а):А рекурсия это какой-то невстроенный метод???

Это последствия начинания с .net.
Любой метод, отсутствующий в 100% готовом виде в FW, ставит в полный тупик.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 14.06.2006 (Ср) 9:57

GSerg писал(а):Это последствия начинания с .net.
Любой метод, отсутствующий в 100% готовом виде в FW, ставит в полный тупик.


Согласен, потому-то и работаю в VS, что весь процесс програмирования свелся к тому, что, как обезьянка перетаскиваю объекты, да выбираю методы и свойства.. :)
Я ж не профессиональный программер...

Собственно поэтому и возникли у меня 2 вопроса:
Вся истерика, в целом вылилась всего-то в код:

Код: Выделить всё
Public Sub Action(ByVal sender As System.Object, ByVal Range As String, ByVal Act As Boolean)
        'Range - Значение тега для отобранных нод
        'Act   - Действие для отобраных нод TRUE - развернуть, FALSE - свернуть

        For Each node As TreeNode In sender.Nodes
            'MsgBox(sender.nodes.count.ToString, MsgBoxStyle.Critical)
            If node.Tag = Range Then
                If Act Then
                    node.Parent.Expand()
                Else : node.Collapse(True)
                End If
            End If
            If node.Nodes.Count > 0 Then Action(node, Range, Act)
        Next
    End Sub


Так-что задача, в принципе, решена...
НО возникли еще 2 вопроса:
1. Создал я этот медод в своем классе.
Теперь он появляется в ListMembers, в этом чУдно-удобном окошке,
когда работаешь в текстовом редакторе, при получении
фокуса появляется сигнатура метода. Все замечательно.
а КАК сделать так, чтобы под сигнатурой появлялось еще и описание-подсказка
для метода и, главное для параметров? ну по типу,
как это происходит со встроенными функциями?
Где-то вроде я встречал такой топик, тока теперь убейте, не могу найти.. :(

2. печально-ламерский вопрос. Касательно VB, как такового.
в этом методе первый параметр - SENDER,
т.е. вызов происходит след образом:
MyTree.Action(MyTree, "Object", True)
оно, конечно работает, НО подскажите, КАК правильно было оформить
процедуру, ибо 2 раза указывать myTree, сдается мне, в корне не верно,
ведь вызывая метод для конкретного экземпляра (MyTree.Action)
мы уже указали над чем будем работать.
Одна только сложность, при вызове метода из программы,
в качестве SENDER выступает TreeView, а при рекурсивном
вызове метода уже - TreeNode.

С верой в лучшее,
Max

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 14.06.2006 (Ср) 9:59

GSerg писал(а):
GAGArin писал(а):А рекурсия это какой-то невстроенный метод???

Это последствия начинания с .net.
Любой метод, отсутствующий в 100% готовом виде в FW, ставит в полный тупик.


Это просто ужасно! :shock:

kroskros
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 176
Зарегистрирован: 01.08.2005 (Пн) 6:59

Сообщение kroskros » 14.06.2006 (Ср) 10:08

GAGArin писал(а):А рекурсия это какой-то невстроенный метод???
Процедура перебирает ноды уровня 1 и для кого надо пускает перебирать ноды уровня +1


Кстати, "рекурсия" это когда функция вызывает сама себя... ;)
Max


Вернуться в Visual Basic .NET

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 80

    TopList