全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1169
推到 Plurk!
推到 Facebook!

從Form1中動態Create Form2

答題得分者是:Chance36
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-18 19:05:42 IP:203.204.xxx.xxx 未訂閱
請問如果執行Form1後, 若在Form1中動態Create 另一個視窗Form2. 如:Form2:=TForm2.create(self);//self這邊指的是form1 此時若直接關閉form1,但Form2沒有先關閉,請問Form2的資源是否也會被一並釋放呢?Form2是否會像一般元件一樣會被OWNER在free之前先行自動FREE. 謝謝
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-18 19:34:11 IP:211.20.xxx.xxx 未訂閱
iamjsn 你好 當設定Form2:=TForm2.create(self);//self這邊指的是form1,Form2的Owner為Form1時,原則上Form2會隨Form1的釋放而釋放沒問題, 但一般我的習慣還是保持[誰建立的物由誰負責釋放]的原則,對於程式的除錯會比較好。
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-18 20:22:01 IP:203.204.xxx.xxx 未訂閱
當然我也是想自已從form1做FREE FORM2,不過form2視窗有一個關閉視窗的按鈕,而我在form2的FormClose也加了Action:=cafree;     
 
procedure form2.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 
  Action:=cafree;
end;    
像上面這種情形,如果樓在form1.FormDestroy去free form2 這時form2可能有下列兩種情況 form2已經被關閉(先按form2的關閉視窗按鈕,才去關form1) form2尚未關閉(直接按form1的關閉視窗按鈕,沒先關閉form2) 因為var Form2:TForm2;是宣告在FORM2的單元 不知這時要如何判定form2是否已經被關閉了呢? 因為如果是先手動關閉form2才關form1,這時在form1.FormDestroy裏去檢查form2變數,會發現它無法存取
    procedure Tform1.FormDestroy(Sender: TObject);
begin
  //這邊不知如何判斷form2是否已經被關閉
   //本來用assigned(form2),但判斷不出來
   //還請指點,謝謝      
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-18 20:30:18 IP:218.170.xxx.xxx 未訂閱
    正如Chane36所說,form2的owner是form1,form在free前會先free所以隸屬於自己的物件,如果還是要自行處理    以下的做法前提是你使用form2來建立tform2    
    procedure Tform1.FormDestroy(Sender: TObject);
begin
  if form2<> nil then 
     freeanenil(form2);     
end;
iamjsn
初階會員


發表:78
回覆:95
積分:44
註冊:2002-08-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-18 20:30:58 IP:203.204.xxx.xxx 未訂閱
自已試了一下,發現只要在下面多加一行form2:=nil;在form1用assigned判斷就不會有問題了     
 
procedure form2.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
 
  Action:=cafree;
  form2:=nil;
end;    //////////////////////////////
procedure form1.FormDestroy(Sender: TObject);
begin
   if assigned(from2) then
      from2.Free;
end;    
系統時間:2024-06-28 14:10:30
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!