Form 被 Free 後再 create , 原先的變數值還在 ?? |
尚未結案
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
請問各位長官
若 Form1 動態 create Form2 , Form2 中的global i 將其值設定後 , 當 form2 被 free 再被 create , 原先的 i 值還存在 , 這算 bug 嗎 ?
若希望每次 form2 被 create 後所有的變數值都跟第一次 create 時一樣
有方法嗎 ? 雖然養成好習慣在 formcreate 時都去 initial global (例如每次 create 就設 i:=0), 但目前多支程式已寫好了, 往一個一個去 initial global 的方向可能 loading 太重了 謝謝
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
|
tonytop
中階會員 發表:6 回覆:114 積分:89 註冊:2003-12-04 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
bruce0211
版主 發表:157 回覆:668 積分:279 註冊:2002-06-13 發送簡訊給我 |
引言: 我只能建議。 1. 沒有好的作法!請埋頭苦幹吧。 2. 由於您的global 變數在 implementation 之前宣告,為獨立的變數。 很難處理的。 比較好的作法: 將所有initial global 動作(含其他Form)寫在一個 Procedure 裡。 並在Form2 Free 之後,呼叫該Procedure 。{這也是沒有辦法的事}前面已說過,程式以超過百支,不可能一個一個去補上 initial 變數的動作,我在想是否有某個函式可以在 Form2.Free 後再徹底催毀 Form2 , 讓下次 Form2 被 create 時就像是第一次被 Create 時, 不會留下前一次的 global 值,待其他長官指點迷津了 |
fadichen
初階會員 發表:29 回覆:68 積分:29 註冊:2003-09-11 發送簡訊給我 |
你可以用initialization這個節區, 以下是delphi的help, 研究一下, 應該不難, 變數的初值可以在這個地方設定 The initialization section The initialization section is optional. It begins with the reserved word initialization and continues until the beginning of the finalization section or, if there is no finalization section, until the end of the unit. The initialization section contains statements that are executed, in the order in which they appear, on program start-up. So, for example, if you have defined data structures that need to be initialized, you can do this in the initialization section. For units in the interface uses list, the initialization sections of units used by a client are executed in the order in which the units appear in the client's uses clause. ****阿彌陀佛*****
|
elvis1000
一般會員 發表:6 回覆:50 積分:16 註冊:2004-12-18 發送簡訊給我 |
|
kenspc
一般會員 發表:1 回覆:20 積分:4 註冊:2004-12-09 發送簡訊給我 |
|
arvin
一般會員 發表:12 回覆:9 積分:4 註冊:2002-09-11 發送簡訊給我 |
|
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
引言: 你可以用initialization這個節區, 以下是delphi的help, 研究一下, 應該不難, 變數的初值可以在這個地方設定unit 中 initialization 節區 和 finalization 節區的執行時機,跟 unit 中的 class Create 或 Free 一點關係也沒有 是 unit 載入記憶體,或從記憶體中移除時,才會執行 例如:用 LoadPackage 載入一個 package 時,所有包含在這個 package 中的 unit,若含有 initialization 節區的話,都會執行 反之,若用 UnloadPackage 把某個 package 從記憶體中移除時,則 finalization 區段會執行 要保持一個 class Create 出來之後的變數初值,在每次 Create 都一樣,只有在 constructor (Create) 中,或 constructor 會呼叫到的事件中做 而 TForm 的話,可以在 OnCreate 事件中作 加油喔,喵~ 發表人 - sryang 於 2004/12/23 12:43:24
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
用繼承的方式看看...
var //Global Variable// A: Integer; B: Integer; C: Integer; type TBaseForm = class(TForm) public constructor Create(AOwner: TComponent); override; end; TForm1 = class(TBaseForm) public end; TForm2 = class(TBaseForm) public end; implementation constructor TBaseForm.Create(AOwner: TComponent); begin inherited; A := 1; B := 2; C := 3; end; |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
步驟補充:
(1)先備分你的專案. (2)開一個unit,將TBaseForm及Global變數宣告於此並實作. constructor TBaseForm.Create(AOwner: TComponent); begin inherited; Initial_All_Global_Variables; end; (3)Ctrl-F -> Find in Files-> Key=class(TForm) (4)你可以直接將相關的Form改為自TBaseForm繼承.報告完畢< >< > |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |