如果沒有搞清楚這些動作, 常常在不該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”