Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder

Войти
Регистрация
Восстановить пароль
 
sergyuk
0 / 0 / 0
Регистрация: 14.06.2010
Сообщений: 57
#1

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

14.02.2011, 20:11. Просмотров 1080. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2011, 20:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос TTreeView - количество всех потомков (C++ Builder):

TreeView, подсчитать количество потомков узла - C++ Builder
Доброго времени суток, форумчане! Очень нужна помощь с компонентом TTreeView. Дело вот в чём: пишу значит TTreeNode *node =...

TTreeView - C++ Builder
Подскажите, а можно ли листы в этом компоненте выводить в две строки?

TTreeView ondblclick - C++ Builder
Приветствую, хочу слепить из TTreeView менеджер файлов, подскажите можно ли повесить dblclick на определённый узел, или хотя-бы как...

Работа с TTreeView - C++ Builder
Доброго времени суток!!! Вывожу большой список элементов в TreeView на прямую, из за этого программа сильно замедляется. Мне нужно...

Удаление узлов в TTreeView - C++ Builder
Здравствуйте. Делаю по курсовому проекту синтаксический анализатор, обязательные компоненты дерево вывода и дерево операций. Дерево вывода...

Заполнение TTreeView в отдельном потоке - C++ Builder
Вот не могу придумать как по нормальному реализовать такую задачу. Есть отдельный поток он должен &quot;просканировать&quot; директорию и затем...

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
sergyuk
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
gorin
207 / 14 / 2
Регистрация: 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
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
16.10.2011, 23:19 #7
LK, Я понимаю как вывести имя узла на котором я сейчас, а вот как вывести имена родителей?
0
LK
Заблокирован
16.10.2011, 23:30 #8
ParentNode там нет ?
0
gorin
207 / 14 / 2
Регистрация: 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
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
17.10.2011, 13:25 #11
LK, Ты смотрел исходник на патом посте?
0
LK
Заблокирован
17.10.2011, 13:33 #12
там исходников нет, исключительно ваше желание
btw: не Лінейний список , а Лінійний список .
и смотреть - долго, с умилением, - я должен был на это ? :
0
Миниатюры
TTreeView - количество всех потомков   TTreeView - количество всех потомков  
gorin
207 / 14 / 2
Регистрация: 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
gorin
207 / 14 / 2
Регистрация: 18.08.2009
Сообщений: 571
17.10.2011, 19:33 #15
LK, Это цикл на последний узол, Я думал может как то проверку делать по уровням! Типа switch(), както по уровням определять радителя, но как без понятия!
0
17.10.2011, 19:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2011, 19:33
Привет! Вот еще темы с ответами:

Как сделать открытие memo в TTreeview? - C++ Builder
Форумчане подскажите идеи как реализовать открытие мемо в дочернем каталоге в TTreeview , прикрепил скрин как хочу реализовать. Загвостка...

Действие при нажатии на пункт TTreeView - C++ Builder
Здравствуйте, на форме есть компонент TreeView и как пример записанные разделы: Десерт первый второй третий Напитки

TTreeView и его свойство StateImages - работает ли? (BCB6) - C++ Builder
Что-то у меня не получается (или я не врубаюсь в логику борланда). В StateImages указываю компонент-ImageList, но никакой реакции на...

Отдельно добавить картинки для каждого элемента TTreeView - C++ Builder
А если мне нужно отдельно ещё добавлять картинку в Image для каждого индекса? Как тогда? (без ImageList)


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru