Конференция "Основная" » Терятся ссылка на items[0] в TreeView...
 
  • Jolik © (25.06.08 18:32) [0]
    Hi, All!
    Столкнулся с такой проблемой...

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

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

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

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

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

    Заранее благодарен!
  • Поросенок Винни-Пух © (25.06.08 18:37) [1]
    Либо дерево перестраивается, либо FRootNode - локальная переменная конструктора
  • Поросенок Винни-Пух © (25.06.08 18:47) [2]
    Кстати, зачем тебе FRootNode за пределами процедуры постройки дерева?
  • Jolik © (25.06.08 19:20) [3]
    FRootNode переменная фрейма на котором лежит дерево - т.е не локальная.

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

    ну  же могу еще насоздавать поддеревья, чтобы имеь ссылку на начальный элемент.
    А что значит - перестраиватся дерево?
    Получается ссылки на TreeNode могут оказаться битыми в какой то момент?
  • Поросенок Винни-Пух © (25.06.08 19:23) [4]
    Ну зачем тебе переменная, если ты хочешь, чтобы она была равна ссылке на корень дерева. Используй сам по себе корень дерева.
  • Сергей М. © (25.06.08 19:48) [5]

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


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

    Переменные есть в юнитах, процедурах/функциях (процедурных/функциональных методах). И все. Больше нигде никаких переменных нет.
  • Jolik © (25.06.08 21:34) [6]
    > Ну зачем тебе переменная, если ты хочешь, чтобы она была равна ссылке
    > на корень дерева. Используй сам по себе корень дерева.

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

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

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

    Вообщем то  проблему я решил - сохраняю индекс итема. Проблема приобрела больше академический  характер :)
  • brother © (26.06.08 10:27) [7]

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

    а тут все академики ;)
  • Сергей М. © (26.06.08 10:55) [8]

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


    Ты вообще разницу между Items.Add и Items.AddChild понимаешь ?
 
Конференция "Основная" » Терятся ссылка на items[0] в TreeView...
Есть новые Нет новых   [134491   +13][b:0][p:0]