|
Тема |
Къде се губи Parent-ът |
|
Автор |
NikB (любопитен) |
|
Публикувано | 13.08.04 18:46 |
|
|
Кой знае с тия алкохолни вечери къде листата ми пречат да видя гората.
:
D5
Накратко:
Правя си някакъв tComboBoxMy (runtime),
слагам го в един панел,
запълвам му Items.AddObject с някакви мои обекти
до тук: ОК - виждат се Items и си работи
по някое време решавам да изтрия панела (Free)
в пренаписания деструктур на tComboBoxMy ми казва, че липсвал parent (и то преди inheritet :).
По-поробно:
Направих си наследник на ComboBox (tComboBoxMy), който не е регистриран компонент - създавам си го RunTime и си го слагам в един Panel, който също е RunTime (ползвам фрейм, на който има няколко такива групи "Panel/Panel/ComboBoxMy") - това до тук не знам дали има значение.
Всеки ComboBox (след създаването си) се инициализира с Items.AddObject с обекти, създадени специално за целта.
При някаква случка трябва от фрейма да изтрия панелите и да създам нови (това се налага, защото броя на панелите може да е различен).
На моя tComboBoxMy му пренаписах деструктура, така че да освобождава обектите ми с
Strings_FreeObj(ComboBoxMy.Items);
където:
{}procedure Strings_FreeObj(aStrings: tStrings);
var
Obj : tObject;
k : integer;
begin
if aStrings<>nil then begin
for k:=0 to aStrings.Count-1 do begin
Obj:=aStrings.Objects[k];
FreeAndNil(Obj);
end;
aStrings.Clear;
end;
end;
Панелите ги трия, като обхождам Controls на фрейма (видя ли панел - правя му Free).
Както се очаква, по време на Free на панелите се вика и деструктора на комбо бокса ми.
Е и тогава, в неговия деструктор, дори и в дизай мод не мога да видя Items.Count - пише exception в Watch list, а като го изпълня ми казва, че липсвал парента на комбо бокса.
Къде ли съм оплескал работата?
|
| |
|
|
|