Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.13;
Скачать: CL | DM;

Вниз

Терятся ссылка на items[0] в TreeView...   Найти похожие ветки 

 
Jolik ©   (2008-06-25 18:32) [0]

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

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

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

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

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

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

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


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

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


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

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


 
Jolik ©   (2008-06-25 19:20) [3]

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

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

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


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

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


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


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


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

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


 
Jolik ©   (2008-06-25 21:34) [6]

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

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

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

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

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


 
brother ©   (2008-06-26 10:27) [7]


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

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


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


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


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



Страницы: 1 вся ветка

Текущий архив: 2009.09.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.009 c
1-1214818458
Context
2008-06-30 13:34
2009.09.13
Получить контекстное меню отдельного расширения оболочки


4-1216715300
Nucer
2008-07-22 12:28
2009.09.13
Как запретить эмуляцию нажатия клавиш?


6-1206613280
Stepper
2008-03-27 13:21
2009.09.13
IdHTTP - как в Get запросе обработать сразу два ЮРЛ?


2-1247228683
proger_ru
2009-07-10 16:24
2009.09.13
Звуковые карты


15-1247658666
картман
2009-07-15 15:51
2009.09.13
Как добавить данные из БД в полученный ранее набор данных?