Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086

Операции с деревом проконсультируйте

05.12.2014, 08:34. Показов 1385. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Кто дружит с деревьями, есть пару вопросов помогите

1. При установке e.Node.Checked =true необходимо поставить галки во все дочерние элементы если такие имеются, при установке e.Node.Checked =false необходимо снять соответственно.

C#
1
2
3
4
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if(e.Node.Checked) 
        }
2. Какое свойство отвечает за мультивыделение? т.е. я хочу при помощи Shift(Ctrl) + UP/Down/мышь выделить группу узлов (листьев) и щелчком мыши поставить (снять) галки на выделенных элементах и всех их подузлах
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.12.2014, 08:34
Ответы с готовыми решениями:

Операции с комплексными числами. Проконсультируйте. (аргумент, модуль, сложение, умножение, вычитание)
здравствуйте. Эта программа рабочая, работает для аргумента, сложения, вычитания, умножения, модуля комплексных чисел. Проверьте её...

Проконсультируйте
Здравствуйте, Я являюсь владельцем перспективного музыкального портала, На данный момент Тиц 0 Пр 1 , посещаемость около 400, весь траф...

проконсультируйте
Добрый день , решил вот такую сборочку (собрать).Есть вопрос правильно ли все встанет?не возникнут ли проблемы? Процессор: AMD A10-7800...

9
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
05.12.2014, 09:07
1. Нужна рекурсия.
C#
1
2
3
4
5
6
7
8
private void CheckChildren(TreeNode node, bool setCheck)
{
     foreach (TreeNode child in node.Nodes)
     {
          child.Checked = setCheck;
          CheckChildren(child);
     }
}
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
05.12.2014, 10:22  [ТС]
kontuPauk, Не нужна рекурсия


Первую проблему решил

C#
1
2
3
4
private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
{
 for (int i = 0; i < e.Node.Nodes.Count; i++) e.Node.Nodes[i].Checked = e.Node.Checked;
}
Добавлено через 1 час 15 минут
kontuPauk, Подскажи пожалуйста как теперь выбрать с дерева и вложенных поддеревьев все листья у которых Checked = true
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
05.12.2014, 10:50
Что-то про рекурсию я ужо писал ))
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
List<TreeNode> checkedNodeList = new List<TreeNode>();
foreach (TreeNode node in treeView1.Nodes)
{
   if (node.Checked)
      checkedNodeList.Add(node);
   checkedNodeList.AddRange(GetCheckedChildren(node));
}
 
//...
private List<TreeNode> GetCheckedChildren(TreeNode node)
{
   List<TreeNode> checkedNodeList = new List<TreeNode>();
   foreach (TreeNode child in node.Nodes)
   {
      if (child.Checked)
         checkedNodeList.Add(child);
      checkedNodeList.AddRange(GetCheckedChildren(node));
   }
 
   return checkedNodeList;
}
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
05.12.2014, 11:14  [ТС]
Необработанное исключение типа "System.StackOverflowException" . Бесконечный цикл или рекурсия
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
05.12.2014, 14:09
Тьфу ты, обшибся в 17й строке:
C#
1
checkedNodeList.AddRange(GetCheckedChildren(child));
1
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
05.12.2014, 14:38  [ТС]
kontuPauk, Спасибо помогло но есть не большой косяк , данный алголитм так же считывает выбранные подветки а мне надо только листья

Добавлено через 12 минут
C#
1
2
3
4
 foreach (var l in checkedNodeList)
            {
                textBox1.AppendText(l.FullPath+Environment.NewLine);
            }
Code
1
2
3
4
5
6
Localhost/ArchestrA.FSGateway/EXCEL     -  ветка 
Localhost/ArchestrA.FSGateway/EXCEL/1  - ветка ниже уровнем
Localhost/ArchestrA.FSGateway/EXCEL/1/$SYS$ActiveItemCount  - а вот пошли листы
Localhost/ArchestrA.FSGateway/EXCEL/1/$SYS$UpdateInterval
Localhost/ArchestrA.FSGateway/EXCEL/1/$SYS$WriteComplete
Localhost/ArchestrA.FSGateway/EXCEL/1/R1C1
Ветки надо бы убрать, как проверить что есть Children?
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
05.12.2014, 14:42
Ну дык проверяйте уровень узла или наличие у него детей при добавлении. Неужели совсем чуть-чуть не можете додумать?

Добавлено через 55 секунд
Если child.Nodes.Count == 0, значит - лист.
0
192 / 199 / 82
Регистрация: 11.04.2013
Сообщений: 1,086
05.12.2014, 14:45  [ТС]
kontuPauk, не вкуриваю в рекурсию , конечно после рекурсии готовый результат я отфильтрую без проблем но хотелось бы в ставить прям в метод в котором рекурсия
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
05.12.2014, 14:56
Лучший ответ Сообщение было отмечено EVG-1980 как решение

Решение

Так а чего там вкуривать-то? У вас просто меняется условие добавления, не более того:
C#
1
2
if (child.Checked && child.Nodes.Count == 0)
   checkedNodeList.Add(child);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.12.2014, 14:56
Помогаю со студенческими работами здесь

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

Проконсультируйте =))
Мне надо защитить работу Преподаватель спрашивает только три вопроса: -Что делает программа? -Где это ,как бы, видно в проге? -И...

Проконсультируйте:)
Выдаёт ошибку. procedure TForm1.Button1Click(Sender: TObject); var x,f,b:real; begin x:=strtofloat(edit1.Text); ...

Проконсультируйте по чистке
Всем привет. Нужно вот отдать ноутбук почистить, но после того как мне лет 5 назад толком ничего не почистив, еще и деталь подменили,...

Проконсультируйте пожалуйста
Всем привет, есть идея проекта, но так как я в программировании ПО не шарю, нужна консультация (с возможно дальнейшим сотрудничеством). ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 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 На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru