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

Form 的事件 問題

答題得分者是:herbert2
KingKong512
一般會員


發表:23
回覆:20
積分:8
註冊:2011-10-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2016-01-12 15:16:37 IP:163.17.xxx.xxx 訂閱
高手們好
我想問一個關於 From 的問題
內容是

我在我的程式中有用到 動態配置記憶體 的部分
我是想說
我想在 From 這個視窗右上角的 " 叉 " 寫 釋放記憶體空間的程式
也就是當我按下"叉"鍵,關閉程式時,會釋放我先前所配置的記憶體空間

想請問我因該要使用那一個 "事件(Events)" 才對

謝謝
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2016-01-12 17:55:25 IP:60.250.xxx.xxx 訂閱
FormCloseQuery or FormClose
herbert2
尊榮會員


發表:58
回覆:640
積分:894
註冊:2004-04-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2016-01-12 17:59:38 IP:202.39.xxx.xxx 訂閱
如果沒有特殊寫法,不管您如何關閉 Form,都可在 FormCloseQuery() 或 FormClos() 中 delete 掉它。
但要注意,若該記憶體有被其它元件使用到,宜先斷開其連結後才 delete,以免發生 Access Violation。
KingKong512
一般會員


發表:23
回覆:20
積分:8
註冊:2011-10-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2016-01-14 16:00:45 IP:163.17.xxx.xxx 訂閱
想在請教一下

如果我以有用一個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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2016-01-14 23:59:27 IP:202.39.xxx.xxx 訂閱
程式是您自己一人用,不會有別人按了 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 也不會出錯。
編輯記錄
herbert2 重新編輯於 2016-01-15 00:10:09, 註解 無‧
herbert2 重新編輯於 2016-01-15 00:24:25, 註解 無‧
herbert2 重新編輯於 2016-01-15 00:25:25, 註解 無‧
系統時間:2024-04-26 21:01:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!