一般而言每一可見之元件有兩個父親, parent及owner. owner管此元件之Memory. Parent則管顯示.
Desintime時假設你在form1上先放一個panel1, 再在panel1上放一個edit1則Edit1之Owner為Form, parent為Panel, 故Panel Visible改為False, 則Edit也看不到了. Form則會管edit之Memory, 故Form Free時, edit也會自動被free.
[note] 此時, Form之Controls array不包含edit, 但Components array則包含edit. Panel之Controls Array包含此Edit
RunTime:
abc:=TEdit.Create(Self);傳入之參數為owner, 你必須另訂abc之parent否則不會顯示, 假設
abc.parent:=self;
則form之Controls, Components Array均含此Edit, Form管其顯示, 也負責其Memory.
RemoveComponent是不須的除非你在DELPHI IDE中寫Property Editor或Component Editor或 Expert否則不須呼叫此程序.
若Create時未給owner, 就必須自行Free
有owner, 雖然Memory由owner維護, 可以不須free, 但我以為養成良好習慣, RunTime自行Create, 還是自行Free較佳(此純為個人觀點)
你也可以將此元件之parent, 或owner設為其他之WinControl
如果你自己先將元件Free, 則Components, Controls array均會移除此元件, 不會重複free.
Desintime時假設你在form1上先放一個panel1, 再在panel1上放一個edit1則Edit1之Owner為Form, parent為Panel, 故Panel Visible改為False, 則Edit也看不到了. Form則會管edit之Memory, 故Form Free時, edit也會自動被free.
[note] 此時, Form之Controls array不包含edit, 但Components array則包含edit. Panel之Controls Array包含此Edit
RunTime:
abc:=TEdit.Create(Self);傳入之參數為owner, 你必須另訂abc之parent否則不會顯示, 假設
abc.parent:=self;
則form之Controls, Components Array均含此Edit, Form管其顯示, 也負責其Memory.
RemoveComponent是不須的除非你在DELPHI IDE中寫Property Editor或Component Editor或 Expert否則不須呼叫此程序.
若Create時未給owner, 就必須自行Free
有owner, 雖然Memory由owner維護, 可以不須free, 但我以為養成良好習慣, RunTime自行Create, 還是自行Free較佳(此純為個人觀點)
你也可以將此元件之parent, 或owner設為其他之WinControl
如果你自己先將元件Free, 則Components, Controls array均會移除此元件, 不會重複free.