Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
1

Как сохранить состояние TreeView после открытия закрытия формы?

23.10.2018, 17:52. Показов 2576. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На форме расположено "TreeView".
Node_1
-- Node_1_1
-- Node_1_2
Node_2
-- Node_2_1
-- Node_2_2

Сеанс 1
Открываем форму
Получаем
"Node_1" - свёрнуто;
"Node_2" - свёрнуто;
Все узлы свёрнуты.
Пользователь разворачивает "Node_2".
Получаем
"Node_1" - свёрнуто;
"Node_2" - развёрнуто;
Закрывает форму.

Сеанс 2
Открываем форму.
Получаем
"Node_1" - свёрнуто;
"Node_2" - развёрнуто;

Вопрос.
Как сохранить состояние свёрнуто, развёрнуто для всех узлов всех уровней?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2018, 17:52
Ответы с готовыми решениями:

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

Как можно сохранить данные в listWiew после закрытия формы (чтоб данные там оставались)
Никак не выходит. Все перепробовал

Как можно сохранить данные из ListView в Txt или Access, чтоб после закрытия формы данные остались

Как сохранить свойство Text элемента TextBox после закрытия программы?
Собственно. Ну то ест программа работает, текст правится вручную. Программу закрываем, текст...

5
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 20:04 2
Soft17, а само дерево никак не сохраняете? Дерево статично и определено в дизайнере или загружается из файла?
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
23.10.2018, 20:10  [ТС] 3
Цитата Сообщение от ashsvis Посмотреть сообщение
Soft17, а само дерево никак не сохраняете? Дерево статично и определено в дизайнере или загружается из файла?
Пока не решил...
Может буду хранить в БД, XML или "*.ini".

Или в другом виде, который обеспечит решение вопроса...
Если у вас какие-либо рекомендации по хранению дерева, буду признателен если сообщите...
0
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 20:42 4
Цитата Сообщение от Soft17 Посмотреть сообщение
Если у вас какие-либо рекомендации по хранению дерева
Рекомендаций нет, так как это зависит от задачи, которая должна быть решена.
В своих проектах я использовал дерево не само по себе, а как отображение иерархии объектной
структуры. Есть категории, в категориях - группы, в группах - элементы.
Каждый элемент привязан к группе, у которой свой уникальный Id и он хранится в элементе.
И так далее, группы имеют Id категорий.

А при загрузке все сущности загружаются в порядке иерархии: сначала категории, потом группы и
потом элементы. И узлы TreeView содержат ссылки на эти сущности.

Можно даже унаследовать от TreeNode и добавить ему поля для хранения типизированных ссылок.

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

У класса TreeNode есть также свойство FullPath, которое можно использовать при записи признака IsExpanded.
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
23.10.2018, 20:47  [ТС] 5
ashsvis,
Ок.
Направление понял...
Пока попробую "переварить" вами сказанное....

Если вам не сложно, буду признателен, если продемонстрируете по изложенному примеры кода или фрагменты кода..
0
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
23.10.2018, 21:16 6
Вот примерчик:
C#
1
public static readonly List<ChannelNode> ChannelNodes = new List<ChannelNode>();
C#
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public static void UpdateProductTree(TreeView navigator, int displayIndex)
{
    navigator.Nodes.Clear();
    navigator.Nodes.Add(new TreeNode("Нефтебаза") { Name = "Root" });
 
    lock (ChannelNodes)
    {
        foreach (var channel in ChannelNodes.OrderBy(item => item.Index))
        {
            var nodes = navigator.Nodes.Find("Root", true);
            if (nodes.Length == 0) return;
            var nodeRoot = nodes[0];
            if (channel.Overpass <= 0) continue;
            var keyOverpass = String.Format("Overpass{0}", channel.Overpass);
            TreeNode nodeOverpass;
            nodes = navigator.Nodes.Find(keyOverpass, true);
            if (nodes.Length == 0)
            {
                nodeOverpass = new TreeNode("Эстакада " + channel.Overpass) {Name = keyOverpass};
                nodeRoot.Nodes.Add(nodeOverpass);
            }
            else
                nodeOverpass = nodes[0];
            var keyWay = String.Format("Overpass{0}Way{1}", channel.Overpass, channel.Way);
            TreeNode nodeWay;
            nodes = navigator.Nodes.Find(keyWay, true);
            if (nodes.Length == 0)
            {
                nodeWay = new TreeNode("Путь " + channel.WayFine) {Name = keyWay};
                nodeOverpass.Nodes.Add(nodeWay);
            }
            else
                nodeWay = nodes[0];
            var keyProduct = String.Format("Overpass{0}Way{1}Product{2}",
                                            channel.Overpass, channel.Way, channel.Product);
            TreeNode nodeProduct;
            nodes = navigator.Nodes.Find(keyProduct, true);
            if (nodes.Length == 0)
            {
                nodeProduct = new TreeNode(channel.ProductFine)
                    {
                        Name = keyProduct,
                        Tag = channel.Index.ToString("0")
                    };
                nodeWay.Nodes.Add(nodeProduct);
            }
            else
            {
                nodeProduct = nodes[0];
                nodeProduct.Tag = nodeProduct.Tag + ";" + channel.Index.ToString("0");
            }
        }
    }
    var nodeKey = Config.ReadString("FillingPage" + displayIndex, "Navigate", "");
    var foundnodes = navigator.Nodes.Find(nodeKey, true);
    if (foundnodes.Length == 0) return;
    navigator.SelectedNode = foundnodes[0];          
}
1
23.10.2018, 21:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2018, 21:16
Помогаю со студенческими работами здесь

Сохранить backgroundImage после закрытия проги
Люди добрые подскажите, пожалуйста, как сохранить в settings или в xml очень надо!!!! То есть...

Как записать условие открытия второй формы после успешной авторизации в ВКонтакте?
Добрый день, у меня есть одна форма где пользователь вводит логин и пароль. Мне нужно чтобы...

Обновление формы после закрытия
После закрытия Form2 нужно чтобы данные на Form1 обновились(datagridview1, textbox1 и textbox2)...

Завершение потоков, после закрытия формы
После закрытия формы в процессах продолжает висеть процесс. Я так понимаю вот этот поток не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru