Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Копирование TreeView / 5 сообщений из 5, страница 1 из 1
02.04.2015, 08:36
    #38924441
Sergey_New
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование TreeView
Создал многоуровневую переменную
Код: vbnet
1.
Public tv As New TreeView


Заполнил её из БД.
Требуется заполнять статические TreeView на разных формах.
Интересно, что если выполнить
Код: vbnet
1.
frm_tv=tv

(понятно, что такого метода нет), то в frm_tv присутствуют все узлы из tv, но они на форме не прорисовываются.
Как справиться с многоуровневым деревом?
...
Рейтинг: 0 / 0
02.04.2015, 21:48
    #38925675
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование TreeView
Sergey_New,

Обойти дерево и добавить каждый элемент
...
Рейтинг: 0 / 0
03.04.2015, 07:21
    #38925803
Sergey_New
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование TreeView
VSVLAD,
Так и делал. Только не получается добавлять узлы 2 и более уровня к своим родителям. Что-то не разберусь, как организовать рекурсию, когда уровней более 2.
...
Рейтинг: 0 / 0
03.04.2015, 12:17
    #38926138
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование TreeView
Sergey_New,

Есть способ через рекурсию, нашёл в сети. Работает, проверено.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Public Sub CopyNode(node As TreeNode, dest As TreeNodeCollection)
	Dim copy As New TreeNode(node.Name) '= CType(node.Clone(), TreeNode)
	copy.Text=node.Text
	
    dest.Add(copy)
    
    For Each child As TreeNode In node.Nodes
        CopyNode(child, copy.Nodes)
    Next
    
End Sub

Public Sub CopyTree(src As TreeView, dest As TreeView)
    For Each node As TreeNode In src.Nodes
        CopyNode(node, dest.Nodes)
    Next
End Sub


Но я попробовал создавать новые итемы через метод Clone, и создаются автоматом все дочерение элементы. Мне так даже больше нравится:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
Public Class MainForm

Sub Button1_Click(sender As Object, e As EventArgs)
    TreeViewClone(treeView1, treeView2)		
    treeView2.ExpandAll()
End Sub

Public Sub TreeViewClone(FromTV As TreeView, ToTV As TreeView)
    For Each xNode As TreeNode In FromTV.Nodes
        Dim copyNodes As TreeNode = CType(xNode.Clone(), TreeNode)
        ToTV.Nodes.Add(copyNodes)
    Next
End Sub

Sub MainForm_Load(sender As Object, e As EventArgs)
    treeView1.Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.1"), New TreeNode("Уровень 1.2"), New TreeNode("Уровень 1.3") })
    treeView1.Nodes(0).Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.1.1"), New TreeNode("Уровень 1.1.2")})
    treeView1.Nodes(1).Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.2.1"), New TreeNode("Уровень 1.2.2"), New TreeNode("Уровень 1.2.3")})
    treeView1.Nodes(2).Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.3.1"), New TreeNode("Уровень 1.3.2"), New TreeNode("Уровень 1.3.3")})
    treeView1.Nodes(0).Nodes(0).Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.1.1.1"), New TreeNode("Уровень 1.1.1.2")})
    treeView1.Nodes(0).Nodes(1).Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.1.2.1"), New TreeNode("Уровень 1.1.2.2")})
    treeView1.Nodes(0).Nodes(1).Nodes(0).Nodes.AddRange(New TreeNode() { New TreeNode("Уровень 1.1.2.1.1")})
    treeView1.ExpandAll()
End Sub
	
End Class
...
Рейтинг: 0 / 0
04.04.2015, 05:55
    #38926871
Sergey_New
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Копирование TreeView
VSVLAD,
Большое спасибо!
Как-то я упустил метод clone, т.к. искал метод copy :(
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Копирование TreeView / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]