![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Странная работа TreeView [D7, WinXP]
APXi © (2007-09-18 08:32:00)Есть фрейм с деревом и одной кнопкой, а также внутреннее поле fRootNode.
В конструкторе фрейма создаем fRootNode
constructor TFrame2.Create(AOwner: TComponent);
begin
inherited;
fRootNode := TreeView1.Items.AddObject(nil, '111', nil);
TreeView1.Items.AddChild(fRootNode, '123');
end;
А при нажатии на кнопку выводим
procedure TFrame2.Button1Click(Sender: TObject);
begin
ShowMessage(fRootNode.Text);
end;
Данный фрейм положен на форму.
При запуске и нажатии кнопки возникает ошибка, либо Access Violation, либо при просмотре в отладчике, всякая ерунда не похожая на fRootNode;
Что может быть?
APXi (2007-09-18 10:28:00) [21]> С какого перепугу в конструкторе ты обращаешься к TreeView1, если этот контрол будет создан после завершения конструктора
Он будет создан при вызовет inherited, а после этого я к нему обращаюсь.
Точно косяк при смене Parenta.
Пока вижу решение в передаче Parenta в конструктор.
Может кто еще чего подскажет?
DVM (2007-09-18 10:26:00) [22]
> APXi (18.09.07 08:32)
Твое Create у фрейма и OnCreate формы - это совершенно разные вещи. У формы в момент вызова OnCreate она уже создана и создано все что на ней, у фрейма в Create ничего еще не создано. Отсюда AV.
И вообще, на кой ляд тебе эти фреймы - возьми форму - все то же самое, но удобнее и без глюков, которые у фреймов все же наблюдаются.
Сергей М. (2007-09-18 09:56:00) [23]
> косяк при присваивании Parent
Фигня какая-то ...
С какого перепугу в конструктореты обращаешься к TreeView1, если этот контрол будет создан послезавершения конструктора ?
APXi (2007-09-18 09:50:00) [24]Кажется косяк при присваивании Parent, у формы например меняется Handle, наверное это также влияет и на TreeView с его нодами
APXi (2007-09-18 09:43:00) [25]Если сделать кнопку №2 и в ней создавать новую Ноду и записывать ее в другое поле, а при нажатии кнопки № 3 показывать данные из этого поля то все работает нормально.
Такая же фигня, если сделать форму вместо фрейма и присвоить ей например Parent=form1.panel1.
clickmaker (2007-09-18 09:35:00) [26]
> Возможно, в конструкторе фрейма еще не создано окно TreeView
если б так, то AV бы вылетело уже в Create
MBo (2007-09-18 08:41:00) [27]Возможно, в конструкторе фрейма еще не создано окно TreeView, отсюда и ошибка. Для формы подобные проблемы преодолеваются, например, переносом кода в перекрытый метод CreateWnd