BCB Form Create/Close Procedure Flow

如果沒有搞清楚這些動作, 常常在不該cleanup的部份就先cleanup了,害得後面一些還會被callup的method想access的東西都access不到。然後程式就爆走啦 XDD,為了避免自己重蹈覆轍,還是寫一篇來記錄一下。[這是我自己測出來的結果,使用的是BCB 6.0,若有錯誤還請幫忙指正,謝謝 :) ]

只有單一Form:

Create:

OnCreate()-> OnShow() -> OnActivate() -> OnCanResize() -> OnConstrainedResize() -> OnResize()

Close:

OnCloseQuery() -> OnClose() -> OnHide() -> OnDestory() -> ~Form1()

兩個Form: Form1, Form2 且互相沒有繼承關係:

Create:

Form1 Constructor -> OnCreate() -> Form1產生完成跳 -> Form2 Constructor ->回到Form1 -> OnShow() -> …… -> OnResize()

Note: 這個時候Form2的OnCreate()不會被執行!!!

Close:

Form1的OnCloseQuery() -> OnClose() -> -> Form2 Destructor -> Form1的OnHide() -> Form1的OnDestory() -> ~Form1()的Destructor

Note: Form2的OnDestory()是沒有被執行的!!!

兩個Form: Form1, Form2 且Form2繼承自Form1:

Create:

Form1 Constructor -> OnCreate() -> Form1產生完成跳 -> Form2 Constructor -> Form2的OnCreate() -> Form1 Constructor -> Form2的Constructor -> 回Form1-> OnShow() -> …… -> OnResize()

Note: Form2的onCreate()是先執行Form2的constructor再執行Form1的constructor!!

Close:

如果Form2是在隱藏的狀態:

Form1 OnCloseQuery() -> OnClose() -> Form2 Destructor -> Form1 Destructor -> Form2 OnDestory() -> Form1 OnHide() -> Form1 OnDestory() -> Form1 Destructor

Note: Form1的Destructor被執行兩次!!!

如果Form2在顯示的狀態:

Form1 OnCloseQuery() -> OnClose() -> Form2 onHide() -> Form2 Destructor -> Form1 Destructor -> Form2 OnDestory() -> Form1 OnHide() -> Form1 OnDestory() -> Form1 Destructor

Note: Form1的Destructor被執行兩次!!!

比較Form1跟Form2的隱藏以及顯示的過程,會發現只多了一個步驟,就是將Form2隱藏的過程(上面紫色的部份)

0 Response to “BCB Form Create/Close Procedure Flow”


  • No Comments

Leave a Reply