0 / 0 / 0
Регистрация: 14.06.2010
Сообщений: 57
1

TTreeView - количество всех потомков

14.02.2011, 20:11. Показов 2155. Ответов 14
Метки нет (Все метки)

В общем при добавлении node в дерево я увеличиваю переменную countNode на единицу.
Её я использую для перебора всех node в дереве. Если есть уже зарезервированная переменная или можно как то иначе определить их кол-во, скажите как.
Но это не проблема, проблема в том что выдаёт ошибку "List index out of bounds(0)". Помогите пожалуйста.


Кусок кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void SubNodes(TTreeNode *node,int Kol)
{
for (int i = 1; i <= countNode; i++)
    {
    if (node == node->Item[i]->Parent)
        {
        Kol = Kol + 1;
 
        SubNodes(node->Item[i],Kol);
        }
    }
}
//----------------------------------------------------------------------
//tvComputerContent - это компонент TreeView
void __fastcall TFormWindow_1::tvComputerContentClick(TObject *Sender)
{
TTreeNode *node = FormWindow_1->tvComputerContent->Selected;
schNode = 0;
SubNodes(node,schNode)
Label1 = schNode;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2011, 20:11
Ответы с готовыми решениями:

TreeView, подсчитать количество потомков узла
Доброго времени суток, форумчане! Очень нужна помощь с компонентом TTreeView. Дело вот в чём: ...

Удалить всех потомков выбранного узла TTreeView
Вопрос в названии темы.

Удаление узла в TTreeView без удаления потомков
Здравствуйте. Подскажите, пожалуйста, метод удаления узла из TTreeView без удаления потомков этого...

Выведите номера вершин, у которых количество потомков в левом поддереве не равно количеству потомков в правом
Выведите номера вершин, у которых количество потомков в левом поддереве не равно количеству...

14
LK
Заблокирован
14.02.2011, 20:22 2
Плпробуй поставить условие
C++
1
2
3
4
5
6
if (countNode != 0) {
  for (int i = 1; i <= countNode; i++) {
...
  }
}
else {ShowMessage("Пустое дерево");}
тебе четко указали : List index out of bounds(0).

Добавлено через 2 минуты
int i = 1; - и нумерация там начинается с 1 или с 0 ? если с 0 - тогда
C++
1
for (int i = 0; i <= countNode-1; i++) {
0
0 / 0 / 0
Регистрация: 14.06.2010
Сообщений: 57
14.02.2011, 20:35  [ТС] 3
Дело в том что я ещё в самом начале ноде присваиваю номер selected, т.е. мне нужно подсчитать кол-во потомков этого выделенного node, а так же подпотомков и так далее, в общем всё что лежит в этой папке.

и может ошибка в том что node нужно перебирать по абсолютному индексу, как например программно сделать 10-ый node по абсолютному индексу выделенным? чисто для примера.
0
LK
Заблокирован
14.02.2011, 20:47 4
Цитата Сообщение от sergyuk Посмотреть сообщение
Дело в том что я ещё в самом начале ноде присваиваю номер selected, т.е. мне нужно подсчитать кол-во потомков этого выделенного node, а так же подпотомков и так далее, в общем всё что лежит в этой папке.
- ну и ищите в папке, задав selected в качестве ее имени, при чем здесь дерево ?
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
16.10.2011, 23:02 5
LK, Маленький вопрос! Как вывести в Memo1 Название корней,
Например я Создал корень а в этом корне еще один, а в этом созданном корне еще один
Корень1
Корень2
Корень3
Вот например я Сейчас на Корень3, вот мне в Мемо1 должно вывести типа так
Корень1 Корень2 Корень3

Добавлено через 1 минуту
C++
1
2
3
Корень1
    Корень2
        Корень3
Добавлено через 7 минут
Вот примерно так
0
LK
Заблокирован
16.10.2011, 23:08 6
для начала - сюда
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
16.10.2011, 23:19 7
LK, Я понимаю как вывести имя узла на котором я сейчас, а вот как вывести имена родителей?
0
LK
Заблокирован
16.10.2011, 23:30 8
ParentNode там нет ?
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
17.10.2011, 13:13 9
Я просмотрел, не что похожего ненашол, там есть цикл но он не то что нужно делает! Ты посмотри исходник пример тот что я оставил на #5 посте!!

Добавлено через 1 минуту
Вот примерно так

Добавлено через 13 часов 13 минут
LK, Вот этот код не выбивает ни одной ошибки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  TTreeNode* parent = bosNode->Parent;
  bool isparent = bosNode->HasAsParent(alEast);
  int bosPos = alEast->IndexOf(bosNode);
 
  if ( isparent )
  {
    String bosLoc = bosPos;
    MemoPredstav->Lines->
      Add("Checked to see if Boston's parent was");
    MemoPredstav->Lines->Add("AL East...it was!  Its child index is "
      + bosLoc);
    MemoPredstav->Lines->Add("Boston's parent name via the Parent");
    MemoPredstav->Lines->Add("was " + parent->Text);
  }
но при нажатии на кнопку в которой этот код ошибка!

Добавлено через 18 минут
Ошибка:
Access violation at address 004E57D0 in module 'Project1.exe'. Read of address 00000004
0
LK
Заблокирован
17.10.2011, 13:23 10
AV поймать не так просто , без этого куска кода AV отсутствует ?
Access Violation в деталях
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
17.10.2011, 13:25 11
LK, Ты смотрел исходник на патом посте?
0
LK
Заблокирован
17.10.2011, 13:33 12
там исходников нет, исключительно ваше желание
btw: не Лінейний список , а Лінійний список .
и смотреть - долго, с умилением, - я должен был на это ? :
Миниатюры
TTreeView - количество всех потомков   TTreeView - количество всех потомков  
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
17.10.2011, 13:41 13
Она работает, была написана на Делф. там в Мемо1 как видно выводятся название узлов, вот что то такое нужно, Название одного узла по индексу я понял как вытягивать а вот как в развернутом списке в последнем вложенном, при нажатии на него чтобы вывело в Мемо1 родителей узлов?

Добавлено через 52 секунды
LK, Та прога не моя, это прогу я нашол как пример!
0
LK
Заблокирован
17.10.2011, 14:15 14
попробуй для начала получить текст родительских узлов:
C++
1
2
3
4
for(int i=0; i<TreView1->Items->Count; i++) // цикл перебора узлов самого верхнего уровня дерева
{
  MemoPredstav->Lines->Add(TreeView->Items->Item[i]->Text);
}
0
209 / 16 / 4
Регистрация: 18.08.2009
Сообщений: 571
17.10.2011, 19:33 15
LK, Это цикл на последний узол, Я думал может как то проверку делать по уровням! Типа switch(), както по уровням определять радителя, но как без понятия!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2011, 19:33
Помогаю со студенческими работами здесь

Вывести номера вершин, у которых количество потомков в левом поддереве не равно количеству потомков в правом поддереве
Помогите Граф отобразить, путь вывести. Если нет пути, вывести сообщение. Ввод матрицы должен...

Генеалогическое древо. Паспортные данные членов некоторого родового клана; ссылки на детей (или на родителей). Поиск всех потомков или всех предков дл
помогите пожалуйста решить, срочно, заранее спасибо Добавлено через 2 часа 54 минуты как найти...

Запрос всех потомков дерева
Всем привет! Имеется древовидная таблица. Задался таким вопросом: как сделать так, чтобы из всей...

Удаление потомков всех уровней
Доброго времени суток. Возникла следующая проблема. В базе висит иерархия документов (до 5ти...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru