動態產生視窗一直關不掉? |
尚未結案
|
小蟲
一般會員 發表:23 回覆:35 積分:11 註冊:2004-08-26 發送簡訊給我 |
大家好!!我想請問一下
我發生一個怪事情一直找不到答案!
我做了一個動態產生視窗物件!!
方別建了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 發送簡訊給我 |
|
小蟲
一般會員 發表:23 回覆:35 積分:11 註冊:2004-08-26 發送簡訊給我 |
|
ENIX007
高階會員 發表:28 回覆:274 積分:185 註冊:2003-11-27 發送簡訊給我 |
等等..等等...
我了解了...沒注意到您的每一個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 發送簡訊給我 |
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 發送簡訊給我 |
小蟲您好
引言: 你說把我在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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |