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

動態產生視窗一直關不掉?

尚未結案
小蟲
一般會員


發表:23
回覆:35
積分:11
註冊:2004-08-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-26 18:23:02 IP:211.78.xxx.xxx 未訂閱
大家好!!我想請問一下 我發生一個怪事情一直找不到答案! 我做了一個動態產生視窗物件!! 方別建了FORM1'FORM2跟FORM3 我在PROJECT裡面的OPTION把FORM2跟FORM3 放入AVAILABLE FORMS:中 我在FORM1中的按鈕打入 TForm2 *Form2; try { Form2 = new TForm2(Application); Form2->ShowModal(); delete Form1; } catch(Exception &exception) { } 我在FORM2中的按鈕打入 TForm3 *Form3; try { Form3 = new TForm3(Application); Form3->ShowModal(); delete Form2; } catch(Exception &exception) { } 我在FORM3中的按鈕打入 TForm2 *Form2; try { Form2 = new TForm2(Application); Form2->ShowModal(); delete Form3; } catch(Exception &exception) { } 但是卻只有FORM1視窗關的掉 其他都會越開越多?? 為什麼內?? 我是哪裡用錯了嗎?? 謝謝
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-26 18:53:00 IP:203.70.xxx.xxx 未訂閱
小蟲您好 按照您的寫法,應該是連Form1都關不掉喔... 因為您使用了ShowModal(),這會使Focus直接落到新開的Form上... 並且原Form的ButtonClick會無法繼續執行下去... 也就是執行不到delete那行... 把ShowModal()改成Show()就行了... 不過小弟覺得您的寫法蠻詭異的 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
小蟲
一般會員


發表:23
回覆:35
積分:11
註冊:2004-08-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-26 19:02:09 IP:211.78.xxx.xxx 未訂閱
ENIX007大大你好 我之前就試過SHOW了 他的情形是一樣的!! 只有FORM1關的掉 其他都越開越多 ><" 我到底拿裡錯內?? 可否交我一下謝謝
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-26 19:12:31 IP:203.70.xxx.xxx 未訂閱
等等..等等... 我了解了...沒注意到您的每一個ButtonClick事件都宣告了區域變數TFormX, 因此會發生這種現象的原因應該是這樣... 基本上如果使用ShowModal()仍然是不會關閉的...原因如前所述, 若使用Show()的話,則會發生... 1.在Form1中,Form1會關閉是因為Form1是BCB宣告的全域變數指標,它指的正是 Form1這個Form 2.在Form2中,delete Form2這行仍然是BCB宣告的全域變數指標,但先前Form1中 使用的是區域變數Form2(名字剛好一樣),這個區域變數在Click事件 結束時也同時被清掉了,因此全域變數指標Form2並沒有任何值(NULL),所以囉, 當然是沒有作用... 3.Form3發生的情況與Form2相同 4.如此,也造成了嚴重的記憶體流失問題 如果您是要動態操作 > 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
小蟲
一般會員


發表:23
回覆:35
積分:11
註冊:2004-08-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-27 10:44:00 IP:211.78.xxx.xxx 未訂閱
ENIX007謝謝你的教導!! 不過我今天試了一下還是不行內!! 妳說把我在PROJECT裡面的OPTION把FORM1.FORM2跟FORM3 放入AUTS-CREATE FORMS:中 我在FORM1中的按鈕打入 try { Form2->Show(); delete Form1; } catch(Exception &exception) { } 其他以尺類推~ 他是可以關的掉~ 不過~只可以關一次!!就出現問題了!! 後來我試著把delete Form1改成FORM1->Close(); 便成一開始就出問題><" 想請問一下我是哪有做錯嗎? 謝謝
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-27 11:06:51 IP:203.70.xxx.xxx 未訂閱
小蟲您好  
引言: 說把我在PROJECT裡面的OPTION把FORM1.FORM2跟FORM3 放入AUTS-CREATE FORMS:中
咦??我有這樣說嗎?? 您誤會了... <>< face="Verdana, Arial, Helvetica">引言: 我在FORM1中的按鈕打入 TForm2 *Form2;//拿掉這行,不需在此宣告 try { Form2 = new TForm2(Application); Form2->ShowModal(); delete Form1; } catch(Exception &exception) { } 我在FORM2中的按鈕打入 TForm3 *Form3;//拿掉這行,不需在此宣告 try { Form3 = new TForm3(Application); Form3->ShowModal(); delete Form2; //這是所謂的全域指標變數Form2 } catch(Exception &exception) { } 我在FORM3中的按鈕打入 TForm2 *Form2;//拿掉這行 try { Form2 = new TForm2(Application);//這裡是區域變數Form2,因為宣告了區域變數,會以區域變數為主 Form2->ShowModal(); delete Form3; } catch(Exception &exception) { } 把ShowModal()改為Show()... 我的意思是這樣喔 請注意在每一個新開的
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
小蟲
一般會員


發表:23
回覆:35
積分:11
註冊:2004-08-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-27 11:16:17 IP:211.78.xxx.xxx 未訂閱
謝謝ENIX007大大的幫忙 我終於看懂了^^ 真高興~ 麻煩你這麼久~抱歉了 因為我昨天才剛學BCB所以很多都不懂^^ 謝謝你~~^^
系統時間:2024-11-24 5:40:21
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!