Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Терятся ссылка на items[0] в TreeView...


Jolik ©   (2008-06-25 18:32:00) 

Hi, All!
Столкнулся с такой проблемой...

В конструкторе некоего фрейма создаю дерево и сохраняю ссылку на корневой элемент:

FRootNode := MyTreeView.Items.Add(nil, 'Корень');
MyTreeView.Items.Add(FRootNode, 'Первый элемент');
MyTreeView.Items.Add(FRootNode, 'Второй элемент');
...

При этом оказывается FRootNode = Items[0] вплоть до выхода из конструктора (проверял). Т.е. все ок.

Затем попадаю в некую процедуру этого фрейма, и там уже оказыается, что FRootNode <> Items[0]

Может кто сталкивался  с таким явлением?

Заранее благодарен!


Сергей М.   (2008-06-26 10:55:00) [1]


> Jolik ©   (25.06.08 21:34) [6]


Ты вообще разницу между Items.Add и Items.Add Childпонимаешь ?


brother   (2008-06-26 10:27:00) [2]


> академический  характер :)

а тут все академики ;)


Jolik   (2008-06-25 21:34:00) [3]

> Ну зачем тебе переменная, если ты хочешь, чтобы она была равна ссылке
> на корень дерева. Используй сам по себе корень дерева.

Ну например:
FCDRootNode := MyTreeView.Items.Add(nil, 'CD');
FDVDRootNode := MyTreeView.Items.Add(nil, 'DVD');

Теперь когда у меня появиться новый DVD я могу его внести как:

NewDVD := MyTreeView.Items.Add(FDVDRootNode, 'DVD');

Вообщем то  проблему я решил - сохраняю индекс итема. Проблема приобрела больше академический  характер :)


Сергей М.   (2008-06-25 19:48:00) [4]


> FRootNode переменная фрейма


У фрейма нет никаких "переменных". У него есть поля класса/объекта.

Переменные есть в юнитах, процедурах/функциях (процедурных/функциональных методах). И все. Больше нигде никаких переменных нет.


Поросенок Винни-Пух   (2008-06-25 19:23:00) [5]

Ну зачем тебе переменная, если ты хочешь, чтобы она была равна ссылке на корень дерева. Используй сам по себе корень дерева.


Jolik   (2008-06-25 19:20:00) [6]

FRootNode переменная фрейма на котором лежит дерево - т.е не локальная.

> Кстати, зачем тебе FRootNode за пределами процедуры постройки дерева?

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


Поросенок Винни-Пух   (2008-06-25 18:47:00) [7]

Кстати, зачем тебе FRootNode за пределами процедуры постройки дерева?


Поросенок Винни-Пух   (2008-06-25 18:37:00) [8]

Либо дерево перестраивается, либо FRootNode - локальная переменная конструктора


Наверх

Титульная страница Поиск, карта сайта Написать письмо