Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.09.13;
Скачать: [xml.tar.bz2];

Вниз

Терятся ссылка на 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.011 c
15-1248031803
Юрий
2009-07-19 23:30
2009.09.13
С днем рождения ! 18 июля 2009 суббота


15-1247603405
Юрий
2009-07-15 00:30
2009.09.13
С днем рождения ! 15 июля 2009 среда


1-1215010376
int64
2008-07-02 18:52
2009.09.13
Как узнать текущее московское время?


2-1247156058
liveD
2009-07-09 20:14
2009.09.13
невизуальные компоненты


2-1247060617
sydenis
2009-07-08 17:43
2009.09.13
директива компилятора, видная всем





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский