Form 的事件 問題 |
答題得分者是:herbert2
|
KingKong512
一般會員 ![]() ![]() 發表:23 回覆:20 積分:8 註冊:2011-10-18 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
herbert2
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
|
KingKong512
一般會員 ![]() ![]() 發表:23 回覆:20 積分:8 註冊:2011-10-18 發送簡訊給我 |
想在請教一下
如果我以有用一個Button去執行 記憶體空間 釋放的動作 那我還需要在Form右上角的"叉"中去執行 記憶體空間 釋放的動作 ======================================== 以下程式舉例 --------------------- //以下是全域變數 new 一個陣列 叫 Array //以上是全域變數 void __fastcall TForm1::Timer1Timer(TObject *Sender) { 使用 Array 這個陣列 } void __fastcall TForm1::Button1Click(TObject *Sender) { delete Array 這個陣列 // 釋放空間 Close(); } ==================================== 我想問的是 我以在 Button1 中delete Array 這個陣列 並 用 Close() 這個指令關閉程式 那我想知道的是 Close() 這個指令 是否是去執行 Form右上角的"叉" 的個按鈕 如果是的話 我就不能再 FormClose() 寫 delete Array 因為我以在執行 Button1 使把 delete Array 這件事做完了 我會這樣問是因為 我時候我關閉程式這件事 不是去按 "Button1" 這個按鈕 而是去點"叉"鍵 所以我才會想在FormClose()也寫上delete Array 如果 Close() 這個指令 不會 去執行 Form右上角的"叉" 的個按鈕 就沒差 但如果會的話 我該怎麼做??????? 謝謝 |
herbert2
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:58 回覆:640 積分:894 註冊:2004-04-16 發送簡訊給我 |
程式是您自己一人用,不會有別人按了 Button 卻沒接著 Close,又去執行程式的其它作業?
若有此 case,那不就 GG 了! 您的 Button Click 事件的寫法,就是該 Button 形同 Form 右上角的 X, 所以 delete 後立即 Close 便可以免掉 Form Close 無妨, 但如果是一般資料庫的新增、修改、刪除、列印、...的 Form, 通常因欄位多而空間不足,少有再額外設計一個 Close 的 Button, 所以,通常動態記憶體在 Construct 時配置,在 Form Close 時釋放,才不會出錯。 按 Form 右上角的 X 及執行 Close() 之後,都是緊接著去執行 FormCloseQuery() -> FormClose(), 如果沒寫那些事件,當然不會執行。 但我一定會在 FormCloseQuery() 判斷是否允許 Form Close 或向 User Confirm 是否確定要 Close, 當可 Close 時才設 CanClose = true; (default),不准 Close 時設 CanClose = false; (例如: 編輯中的資料未存檔, 且 User 不放棄編輯中的資料),所以,並不是一按 X 就立即 Close,那當然要等 FormClose() 才能 delete 了! 還有一種狀況是,在 Construct 時先設 NULL,在程式中要用時隨時 new 與隨時 delete,FormClose() 也要 delete。 如此,萬一未 new 便 delete 也不會出錯。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |