Страница: 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
Я схитрил в текстбоксе текст центруется автоматом, для мессейджа его нужно немного обработать.
Спроси лучше что непонял, влом переписывать всё с комментами.
Номер ответа: 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
я не проверял!
Замени везде точки на пробелы и выводи в мессейджбокс.