Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: Дв. списки(Дерево) Добавлено: 31.05.08 09:34  

Автор вопроса:  true

Ответить

  Ответы Всего ответов: 77  

Номер ответа: 46
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #46 Добавлено: 07.06.08 14:41
Ну тогда все отлично!:)

Ответить

Номер ответа: 47
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #47
Добавлено: 07.06.08 21:23
Проверь почту, дальше не хуже меня разберешься.
Но если что я тут.

Ответить

Номер ответа: 48
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #48
Добавлено: 07.06.08 21:29

UserForm1 (Code)

Option Explicit

Private Sub CommandButton1_Click()

    Set Tree = Nothing
    Tree.Value = "7"
'    Tree.ToLeft.Value = "0   "
    Tree.ToRight.Value = "9"

'    Tree.ToLeft.ToLeft.Value = "0 "
'    Tree.ToLeft.ToRight.Value = "0 "

    Tree.ToRight.ToLeft.Value = "6"
'    Tree.ToRight.ToRight.Value = "0"

    Tree.ToRight.ToLeft.ToLeft.Value = "4"
    Tree.ToRight.ToLeft.ToLeft.ToRight.Value = "8"
    Tree.ToRight.ToLeft.ToLeft.ToRight.ToLeft.Value = "5"
    TextBox2.Text = TreeView(Tree)
'    MsgBox TreeView(Tree)

End Sub

Ответить

Номер ответа: 49
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #49
Добавлено: 07.06.08 21:31

Module1 (Code)

Option Explicit

Public Tree As New Branch

'сбор строки
Public Function TreeView(Tree As Branch) As String
    Dim FindLvl As Long
    Dim tmpStr As String

    TreeView = Tree.Value
    FindLvl = 2

    Do
        TreeView = TreeView & tmpStr & vbCrLf
        tmpStr = BranchesSearch(Tree, FindLvl)
        FindLvl = FindLvl + vbNull
    Loop While tmpStr <> String$(Len(tmpStr), "·";)

End Function

'рекурсия сбора строки из ветвей заданного уровня
Private Function BranchesSearch(Root As Branch, FindLvl As Long, Optional Level As Long) As String

    If Root.Value = Empty Then BranchesSearch = BranchesSearch & "·": Exit Function

    Level = Level + vbNull

    If Level = FindLvl Then
        BranchesSearch = BranchesSearch & Root.Value & String$(6 - Level, "·";)
    Else
        BranchesSearch = BranchesSearch & BranchesSearch(Root.ToLeft, FindLvl, Level) & "·····"
        BranchesSearch = BranchesSearch & BranchesSearch(Root.ToRight, FindLvl, Level)
    End If

    Level = Level - vbNull

End Function

Ответить

Номер ответа: 50
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #50
Добавлено: 07.06.08 21:32

Branch (Code)

Option Explicit
Public Value As Variant
Public ToLeft As New Branch
Public ToRight As New Branch

Ответить

Номер ответа: 51
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #51
Добавлено: 07.06.08 21:33
Самая важная часть


ЭтаКнига (Code)

Option Explicit

Private Sub Workbook_Open()
    UserForm1.Show vbModal
End Sub



:))))))))))))))))))

Ответить

Номер ответа: 52
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #52 Добавлено: 08.06.08 04:20
Спасибо огромное!:) Сейчас всю проверю ее и если что постараюсь доделать, на крайний случай спрошу!:)

Ответить

Номер ответа: 53
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #53 Добавлено: 08.06.08 08:17
У меня появился один вопрос. Как сделать чтобы дерево само заполнялось из ячеек, а не самим вводить. Я пробовал свой код добавления переделать, но что то ничего не получилось. А так все отлично:) не считая заполнения.

Ответить

Номер ответа: 54
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #54 Добавлено: 08.06.08 08:45
Все я сделал!:) Теперь строится нормальное упорядоченное дерево!:) Но только выводится в textbox, а когда в msgbox, то отступов от края нету и он получается не красивым, а в textbox'е все отлично!:)

Ответить

Номер ответа: 55
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #55 Добавлено: 08.06.08 09:33
И еще, ты не мог бы прокомментировать функции сбора строки: treeview и branchessearch. А то я некоторые части не понимаю.

Ответить

Номер ответа: 56
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #56
Добавлено: 08.06.08 17:02
Но только выводится в textbox, а когда в msgbox, то отступов от края нету


Я схитрил :) в текстбоксе текст центруется автоматом, для мессейджа его нужно немного обработать.

Спроси лучше что непонял, влом переписывать всё с комментами.

Ответить

Номер ответа: 57
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #57
Добавлено: 08.06.08 17:34
TreeView просто вызывает BranchesSearch с указанием FindLvl для получения ветвей указаного Lvl, и если результат есть то операция повторяеться для ветвей следующего уровня.

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

А для мессейджа в начало каждой строки пирамиды нужно добавить кол-во пробелов равное разнице половины длины самой нижней строки и половины длины обрабатываемой строки.

Ответить

Номер ответа: 58
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #58 Добавлено: 08.06.08 17:46
Нифига себе, а как эти половины можно вычислить!? Просто в текстбоксе иногда из-за большого количества элементов смещаятся не так как нужно. Поэтому приходится подбирать, чтобы нормально вывелось.

Ответить

Номер ответа: 59
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #59 Добавлено: 08.06.08 17:49
А с процедурами я уже полность разобрался, поэтому все нормально!:) За это огромное спасибо!:)

Ответить

Номер ответа: 60
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #60
Добавлено: 08.06.08 19:48
Попробуй это


Public Function TreeView(Tree As Branch) As String
    Dim FindLvl As Long
    Dim tmpStr As String
    Dim tmpLine As Variant
    Dim tmpArray() As String

    TreeView = Tree.Value
    FindLvl = 2

    Do
        TreeView = TreeView & tmpStr & vbCrLf
        tmpStr = BranchesSearch(Tree, FindLvl)
        FindLvl = FindLvl + vbNull
    Loop While tmpStr <> String$(Len(tmpStr), " ";)

    TreeView = Left$(TreeView, Len(TreeView) - 2)
    tmpArray = Split(TreeView)
    For Each tmpLine In tmpArray
        tmpLine = space$(len(tmpArray(UBound(tmpArray))) - len(tmpLine)) & tmpLine
    Next
End Function


я не проверял!

Замени везде точки на пробелы и выводи в мессейджбокс.

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам