Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/35: Рейтинг темы: голосов - 35, средняя оценка - 4.60
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127

Добавление элементов в TreeView на основе существующих

04.03.2012, 04:21. Показов 7051. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!
Никогда не работал с TreeView, но сейчас пришлось. Нужно создать несколько десятков одинаковый ветвей, потом заполнять их. Естественно, через редактор их создавать оч долго. Я сделал одну ветку, и хочу на основе ее создать все остальные. Как это сделать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.03.2012, 04:21
Ответы с готовыми решениями:

Добавление существующих элементов препятствует успешной компиляции
подключаю "мастер страниц" и др страницы при помощи: - добавить существующие элементы и при построение вылазит ошибки: ...

Создать таблицу на основе существующих
Допустим, есть 2 объекта DataTable: players (с полями p_id и name) и game (с полями p_id и score). Как сделать новую таблицу, содержащую...

Добавление и удаление элементов TreeView
Могли бы помочь с заданием?: Создать приложение, содержащее элемент управления TreeView. Реализовать возможность добавления...

14
 Аватар для Sergey-K
238 / 229 / 58
Регистрация: 27.10.2011
Сообщений: 249
04.03.2012, 05:03
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TreeView1->Items->Add(NULL, "Главная");
  TTreeNode *Parent = TreeView1->Items->Item[0];
  Parent = TreeView1->Items->AddChildFirst(Parent, "Первая");
  Parent = TreeView1->Items->AddChildFirst(Parent, "Вторая");
  Parent = TreeView1->Items->AddChildFirst(Parent, "Третья");
  TreeView1->Items->AddChild(Parent, "Файл");
}
1
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
04.03.2012, 10:32
C++
1
2
3
4
5
TTreeNode *Add(TTreenode *N, AnsiString S);
TTreeNode *AddFirst(TTreenode *N, AnsiString S);
TTreeNode *AddChild(TTreenode *N, AnsiString S);
TTreeNode *AddChildFirst(TTreenode *N, AnsiString S);
TTreeNode *Insert(TTreenode *N, AnsiString S);
1
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
04.03.2012, 13:54  [ТС]
Большое спасибо за ответы! Теперь я знаю, как динамически создавать ветки.
Но все же, вопрос был немного другой: как на основе одной ветки, сделанной в редакторе, создать еще несколько подобных, тоесть, сделать клоны?
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
05.03.2012, 18:50  [ТС]
другой вопрос:
Как обратиться к какому то конкретному дереву компонента?
Если пишу TreeView->Items->Item[0]->Text = "ееее";, то изменяется название первого дерева, если TreeView->Items->Item[0]->Text = "ееее";, то первого элемента первого дерева. Но как обратиться ко второму дереву и остальным?
0
 Аватар для Sergey-K
238 / 229 / 58
Регистрация: 27.10.2011
Сообщений: 249
05.03.2012, 19:03
C++
1
2
3
4
5
6
7
8
9
TreeView->Items->Item[0]->Text = "ееее";
TreeView->Items->Item[1]->Text = "aaaa";
TreeView->Items->Item[2]->Text = "oooo";
 
TreeView1->Selected->Text = "ssss";
 
TTreeNode *tmp_node;
tmp_node = Tree->Items->AddChild(Parent, "gggg");
tmp_node->Text = "dddd";
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.03.2012, 19:19
Обход дерева (как я понял, тебе нужно именно это) осуществляется вот такой рекурсивной функцией
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
TTreeNode * __fastcall TForm1::RecNod(char *s, TTreeNode *nod)
{ int j, n; char *q; TTreeNode *nd;
   n = atoi(s);
   if (nod==NULL) nd = TreeView1->Items->Item[0];
   else nd = nod->getFirstChild();
   for(j=0; j<n && nd!=NULL;j++) {
       nd = nd->getNextSibling();
   }
   if (nd==NULL) return(nd);
   q = strplus(s, '-');
   if (q==NULL) return(nd);
   else return RecNod(q, nd);
}
Пояснять ничего не буду, я использовал это все в своих целях, со своей организацией дерева.
Главное - использование методов getFirstChild() и getNextSibling()
И, конечно, рекурсия. Куда ж без нее в лесу?
1
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
05.03.2012, 22:42  [ТС]
Офигенное спасибо!!! Терь разобрался
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
05.03.2012, 23:23
Цитата Сообщение от Br.Misha Посмотреть сообщение
Офигенное спасибо!!! Терь разобрался
Доброе слово и кошке приятно
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
22.03.2012, 19:24  [ТС]
Есть еще вопрос.
Нужно сохранить несколько элементов TreeView в один файл. Как это лучше сделать?
Можно ли как то перевести все содержимое элемента в текстовую строку чтобы потом сохранить в ini файл?
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
22.03.2012, 19:42
Цитата Сообщение от Br.Misha Посмотреть сообщение
Есть еще вопрос.
Нужно сохранить несколько элементов TreeView в один файл. Как это лучше сделать?
Можно ли как то перевести все содержимое элемента в текстовую строку чтобы потом сохранить в ini файл?
Тебе нужно сохранить просто текст элемента? Или структуру дерева, с тем, чтобы ее можно было потом восстановить?
Текст элемента
C++
1
TreeView1->Items[i].c_str()
Структура дерева обычно сохраняется в формате XTML (он как бы специально для этого предназначен), даже есть кажется какие-то методы. Я сделал это по-своему, доморощенным образом, и рекомендовать свой способ не могу.
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
25.03.2012, 06:04  [ТС]
У меня есть несколько TreeView с разной структурой, мне надо данные с нескоьких TreeView сохранить в один файл, чтобы потом можно было восстановить данные с этого же файла
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
25.03.2012, 07:13
Для внеклассного чтения:
TTreeView - Показываем XML-файл любой сложности
TTreeView - Сохранение в XML-файл
Исходник XML2TreeView
TTreeView - Exporting to XML & populating from XML
Каждое дерево можно сохранить в отдельный узел и при желании загрузить из этого же узла XML.
1
5 / 6 / 4
Регистрация: 18.11.2009
Сообщений: 661
25.06.2014, 07:12
А вот интересно. Можно ли и как в TreeView добавлять узлы не в направлении корень->подчиненные а в обратном порядке - от листьев к вершине? Другими словами из списка где есть указатель только на предыдуший элемент, а на следующие-нет
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.06.2014, 21:35
И в чем суть такого добавления? Зачем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2014, 21:35
Помогаю со студенческими работами здесь

Создание объектов на основе уже существующих
Добрый день! Есть список объектов List&lt;classA&gt; lst = new List&lt;classA&gt;(); В котором хранятся список его наследников с со своими...

Запрет добавления в TreeView уже существующих там строк
Строка из поля edit помещается в treeview по нажатии на кнопку. как сделать так, чтобы, если такая строка уже существует, ее снова не...

Формирование нового списка на основе существующих данных
Ребят... подскажите пожалуйста..где ошибка в коде... Задача На рабочем листе с помощью программного кода процедуры ProdSales...

Добавление данных с поиском существующих
Добро времени суток всем. Нужна помощь с кнопочкой на юзер форме. Суть в том что есть перечень инвентаря в экселе, хотел написать для неё...

Добавление блоков div, с сохранением существующих
Добрый день, форумчане! Возникла проблема есть следующий css: .Field { text-align: center; } .block { width: 100px; ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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