線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1498
推到 Plurk!
推到 Facebook!

FormDestroy事件函式問題

答題得分者是:aftcast
benlin0725
一般會員


發表:4
回覆:2
積分:1
註冊:2012-05-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-05-09 13:54:24 IP:61.66.xxx.xxx 訂閱
請教有經驗的大大們,TForm的FormDestroy事件函式只有在結束時才會執行嗎?還是在某些情況下會也會執行FormDestroy事件函式?如果是在結束(離開程式)時才會執行此事件的話,那又為什麼要程式中多加上FormDestroy事件函式呢?我有help內關於FormDestroy事件函式的定義,就是會將FormCreate事件函式內建立出來的所有物件使其全部失效,那不就等於是將所佔用記憶體釋放掉,然而今天如選擇了離開程式,程式不就會將所有的物件全部釋放掉嗎?那又為什麼還要再加上FormDestroy的事件函式呢?如不加此FormDestroy事件函式的話會有什麼影響嗎?請各位有經驗的大大們給小弟一點指教。
編輯記錄
benlin0725 重新編輯於 2012-05-09 01:47:32, 註解 無‧
benlin0725 重新編輯於 2012-05-09 01:55:10, 註解 無‧
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-05-09 21:53:21 IP:122.126.xxx.xxx 訂閱
問的還不錯,

故名思義就是form結束時會執行; 但不表示是程式結束時。如果說你從頭到尾都沒有動態的new出form,而是靠程式開始時自動產生form,那麼程式結束時當然什麼都會清,如此感覺上就是多餘的。但,
1/ 你可能是動態的new一個form然後程式還在run的時候delete那個form,那就需要清一下吧!
2/ 即使win32以後的程式在結束時會自動清記憶體,但某些kernel物件是否會清除就不一定。舉例來說,你開一個com port,然後你什麼都不管的就結束程式,那com port 可能就無法再被任何程式使用。所以還是需要清一下kernel類的物件。即向系統有借有還。

以上我想是為何需要FormDestroy事件的幾個重要例子吧!


===================引 用 benlin0725 文 章===================
請教有經驗的大大們,TForm的FormDestroy事件函式只有在結束時才會執行嗎?還是在某些情況下會也會執行FormDestroy事件函式?如果是在結束(離開程式)時才會執行此事件的話,那又為什麼要程式中多加上FormDestroy事件函式呢?我有help內關於FormDestroy事件函式的定義,就是會將FormCreate事件函式內建立出來的所有物件使其全部失效,那不就等於是將所佔用記憶體釋放掉,然而今天如選擇了離開程式,程式不就會將所有的物件全部釋放掉嗎?那又為什麼還要再加上FormDestroy的事件函式呢?如不加此FormDestroy事件函式的話會有什麼影響嗎?請各位有經驗的大大們給小弟一點指教。
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
benlin0725
一般會員


發表:4
回覆:2
積分:1
註冊:2012-05-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-05-10 09:18:40 IP:61.30.xxx.xxx 訂閱

===================引 用 aftcast 文 章===================
問的還不錯,

故名思義就是form結束時會執行; 但不表示是程式結束時。如果說你從頭到尾都沒有動態的new出form,而是靠程式開始時自動產生form,那麼程式結束時當然什麼都會清,如此感覺上就是多餘的。但,
1/ 你可能是動態的new一個form然後程式還在run的時候delete那個form,那就需要清一下吧!
2/ 即使win32以後的程式在結束時會自動清記憶體,但某些kernel物件是否會清除就不一定。舉例來說,你開一個com port,然後你什麼都不管的就結束程式,那com port 可能就無法再被任何程式使用。所以還是需要清一下kernel類的物件。即向系統有借有還。

以上我想是為何需要FormDestroy事件的幾個重要例子吧!

===================================================
那假設有在form中動態new出一個form或是com port,那再請問一下,將清除的程式放在new出來form中的formclose和formdestroy有什麼差別嗎?
aftcast
站務副站長


發表:81
回覆:1482
積分:1762
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-05-10 13:01:01 IP:114.32.xxx.xxx 訂閱
formClose不等於form就要"死"了。在mdi裡的form,close只是hide起來,除非你去改變這樣的行為。

所以,當然有差異。即,有些時候你是要確定它死了才處理,有些則是"關起來",就要處理。

===================引 用 benlin0725 文 章===================

那假設有在form中動態new出一個form或是com port,那再請問一下,將清除的程式放在new出來form中的formclose和formdestroy有什麼差別嗎?
------



蕭沖
--All ideas are worthless unless implemented--

C++ Builder Delphi Taiwan G+ 社群
http://bit.ly/cbtaiwan
系統時間:2017-10-20 0:40:57
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!