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

“TreeNode.IsExpanded” — доступ только для чтения

26.10.2018, 23:24. Показов 3106. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Загружаю в treeView дерево из файла "json".
Метод
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
public static class TreeRepository
    {
public class DataNode
        {
            public string Text { get; set; }
            public bool IsChecked { get; set; }
            public bool IsExpanded { get; set; }
            public List<DataNode> Children { get; set; }
        }
 
public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
        {
            foreach (var dataNode in dataNodes)
            {
                var treeNode = nodes.Add(dataNode.Text);
                treeNode.Checked = dataNode.IsChecked;
                treeNode.IsExpanded = dataNode.IsExpanded;
 
                if (dataNode.Children != null && dataNode.Children.Count > 0)
                {
                    Load(treeNode.Nodes, dataNode.Children);
                }
            }
        }
}
В выражении
C#
1
treeNode.IsExpanded = dataNode.IsExpanded;
Ошибка: CS0200 Невозможно присвоить значение свойству или индексатору "TreeNode.IsExpanded" — доступ только для чтения.

Как исправить ошибку?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.10.2018, 23:24
Ответы с готовыми решениями:

Ошибка - доступ только для чтения. ( Color )
Доброго! При попытке записать коэффициент для цветового канала: tempCol.R = Convert.ToByte(Convert.ToDouble(color.R) * a); в...

Невозможно присвоить значение свойству или индексатору - доступ только для чтения
Доброго времени суток, ребят пишет ошибку: Невозможно присвоить значение свойству или индексатору &quot;string.this&quot; -- доступ...

Невозможно присвоить значение свойству или индексатору -- доступ только для чтения!
Здравствуйте! Выходит ошибка: Невозможно присвоить значение свойству или индексатору &quot;System.Windows.Controls.ItemsControl.Items&quot;...

12
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18297 / 14221 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
26.10.2018, 23:48
Soft17, замени на вызовы методов Expand (развернуть) и Collapse (свернуть).
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.10.2018, 00:05  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Soft17, замени на вызовы методов Expand (развернуть) и Collapse (свернуть).
Сделал так.
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
public static class TreeRepository
    {
public class DataNode
        {
            public string Text { get; set; }
            public bool IsChecked { get; set; }
            public bool IsExpanded { get; set; }
            public List<DataNode> Children { get; set; }
        }
 
public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
        {
            foreach (var dataNode in dataNodes)
            {
                var treeNode = nodes.Add(dataNode.Text);
                treeNode.Checked = dataNode.IsChecked;
                // treeNode.IsExpanded = dataNode.IsExpanded;                
                if (treeNode.IsExpanded == true) treeNode.Expand();
 
                if (dataNode.Children != null && dataNode.Children.Count > 0)
                {
                    Load(treeNode.Nodes, dataNode.Children);
                }
            }
        }
Ошибка пропала.

Появилась проблема
В Например для узла "Node_2" в "TreeView.json" сохраняет
JSON
1
` "Text": "Node_2", "IsChecked": false, "IsExpanded": true, "Children":
в
C#
1
if (treeNode.IsExpanded == true) treeNode.Expand();
приходит false.

Я правильно вас понял?
Как выявить причину проблему с чтением?
Миниатюры
“TreeNode.IsExpanded” — доступ только для чтения  
0
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.10.2018, 00:06  [ТС]
treeNode.Checked работает нормально
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18297 / 14221 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
27.10.2018, 00:11
Цитата Сообщение от Soft17 Посмотреть сообщение
C#
1
if (treeNode.IsExpanded == true) treeNode.Expand();
Это означает "если узел развернут, то развернуть его".

Цитата Сообщение от Soft17 Посмотреть сообщение
Я правильно вас понял?
Почти. Подумай еще немного.
0
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.10.2018, 00:23  [ТС]
OwenGlendower,
Даже не знаю...
Вроде всё перепробовал
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
        {
            foreach (var dataNode in dataNodes)
            {
                var treeNode = nodes.Add(dataNode.Text);
                treeNode.Checked = dataNode.IsChecked;
                // treeNode.IsExpanded = dataNode.IsExpanded;                
                // if (treeNode.IsExpanded == true) treeNode.Expand();
                // if (dataNode.IsExpanded == false) treeNode.Expand();
                // if (treeNode.IsExpanded == false) treeNode.Expand();
                // if (treeNode.IsExpanded) treeNode.Expand();
                if (dataNode.IsExpanded) treeNode.Expand();
 
                if (dataNode.Children != null && dataNode.Children.Count > 0)
                {
                    Load(treeNode.Nodes, dataNode.Children);
                }
            }
        }
Миниатюры
“TreeNode.IsExpanded” — доступ только для чтения  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18297 / 14221 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
27.10.2018, 00:28
Лучший ответ Сообщение было отмечено Soft17 как решение

Решение

Цитата Сообщение от Soft17 Посмотреть сообщение
if (dataNode.IsExpanded) treeNode.Expand();
Вот это должно сработать. Нужно только переместить вызов на момент после заполнения дочерних элементов.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
        {
            foreach (var dataNode in dataNodes)
            {
                var treeNode = nodes.Add(dataNode.Text);
                treeNode.Checked = dataNode.IsChecked;
 
                if (dataNode.Children != null && dataNode.Children.Count > 0)
                {
                    Load(treeNode.Nodes, dataNode.Children);
                }
                if (dataNode.IsExpanded) treeNode.Expand();
            }
        }
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.10.2018, 00:41  [ТС]
OwenGlendower,
А как быть с "IsSelected"?

Выражение
C#
1
if (dataNode.IsSelected) treeNode.IsSelected = true;
выдаёт ошибку.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18297 / 14221 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
27.10.2018, 00:53
Soft17, используй свойство SelectedNode у TreeView.
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.10.2018, 01:02  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Soft17, используй свойство SelectedNode у TreeView.
Не могли бы вы чуть подробнее рассказать...

У меня в форме в кнопке находится:
C#
1
this.treeView2.Load(jsonFilePath);
Метод Load(this TreeNodeCollection nodes, List<DataNode> dataNodes) находится в отдельном классе "TreeRepository.cs"

Как это всё организовать?
В классе "TreeRepository.cs" сделать отдельный метод для "IsSelected" и забирать значение "IsSelected"?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18297 / 14221 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
27.10.2018, 15:04
Soft17, нужно передать TreeView в метод Load и добавить присвоение свойству SelectedNode
C#
1
if (dataNode.IsSelected) treeView.SelectedNode = treeNode;
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.10.2018, 16:35  [ТС]
OwenGlendower,
В метод "Load" добавил аргумент "TreeView treeView_1"

Было
C#
1
public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
Стало
C#
1
public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes, TreeView treeView_1)
Получаю ошибки
CS1929 'TreeNodeCollection" не содержит определение для "Load", и наиболее подходящий перегруженный метод расширения "TreeRepository.Load(TreeView, string)" требует наличия получателя типа "TreeView". 33
CS1503 Аргумент 2: не удается преобразовать из "System.Collections.Generic.List<rsh.frm .frm1.TreeRepository.DataNode>" в "string". 46
CS1503 Аргумент 1: не удается преобразовать из "System.Windows.Forms.TreeNodeCollection " в "System.Windows.Forms.TreeView". 46


Весь код
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
public static class TreeRepository
    {
        public class DataNode
        {
            public string Text { get; set; }
            public bool IsChecked { get; set; }
            // public bool IsExpanded { get; set; }
            public bool IsExpanded { get; set; }
            public bool IsSelected  { get; set; }
            public List<DataNode> Children { get; set; }
        }
        
        public static List<DataNode> LoadDataNodes(string jsonFilePath)
        {
            var json = System.IO.File.ReadAllText(jsonFilePath);
            var dataNodes = JsonConvert.DeserializeObject<List<DataNode>>(json);
            return dataNodes;
        }
 
        public static void Load(this TreeView treeView, string jsonFilePath)
        {
            treeView.Nodes.Load(LoadDataNodes(jsonFilePath));
        }
 
        // public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes)
        public static void Load(this TreeNodeCollection nodes, List<DataNode> dataNodes, TreeView treeView_1)
        {
            foreach (var dataNode in dataNodes)
            {
                var treeNode = nodes.Add(dataNode.Text);
                treeNode.Checked = dataNode.IsChecked;
                
                if (dataNode.Children != null && dataNode.Children.Count > 0)
                {
                    Load(treeNode.Nodes, dataNode.Children);
                }
 
                if (dataNode.IsExpanded) treeNode.Expand();
                if (dataNode.IsSelected)
                {
                    //   treeNode.IsSelected = true;
                    treeView_1.SelectedNode = treeNode;
 
                }
            }
        }
Миниатюры
“TreeNode.IsExpanded” — доступ только для чтения  
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18297 / 14221 / 5368
Регистрация: 17.03.2014
Сообщений: 28,897
Записей в блоге: 1
27.10.2018, 20:15
Soft17, метод ожидает три аргумента, а ты передаешь два. Стыдно такие вопросы задавать.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2018, 20:15
Помогаю со студенческими работами здесь

Следует ли сохранять ссылку на поле инстанции, доступ к которому возможен только для чтения?
Привет всем! Решил задать вопрос в раздел для новичков. Скажите-ка, мне, пожалуйста: следует ли сохранять ссылку на поле инстанции,...

Ошибка "Доступ только для чтения" при перегрузке оператора
Выскакивает такая вот ошибка. В чем может быть дело?

Изменение поля Year в DateTime: "доступ только для чтения"
Есть класс, в нём нужно сделать свойство типа int c методами get и set для получения информации и изменения года рождения в закрытом поле...

Доступ только для чтения
Привет Текущий пользователь запускает приложение, на клиенте получаем SID текущего пользователя, ищем в базе данных ACCESS...

Доступ НЕ только для чтения к документу из журнала
Господа знающие! Столкнулся с такой проблемой: Задача: Есть журнал документов. Добавляю к нему кнопочку. Хочу чтобы по этой кнопочке...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru