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


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

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

Обойти дерево и добавить каждый элемент
...
Рейтинг: 0 / 0
Копирование TreeView
    #38925803
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,
Так и делал. Только не получается добавлять узлы 2 и более уровня к своим родителям. Что-то не разберусь, как организовать рекурсию, когда уровней более 2.
...
Рейтинг: 0 / 0
Копирование TreeView
    #38926138
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Копирование TreeView
    #38926871
Sergey_New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VSVLAD,
Большое спасибо!
Как-то я упустил метод clone, т.к. искал метод copy :(
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Копирование TreeView
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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