要如何代參數FormClose(??); |
尚未結案
|
gcpp
一般會員 發表:16 回覆:19 積分:7 註冊:2004-12-29 發送簡訊給我 |
|
Zard
尊榮會員 發表:24 回覆:396 積分:539 註冊:2003-11-26 發送簡訊給我 |
|
gcpp
一般會員 發表:16 回覆:19 積分:7 註冊:2004-12-29 發送簡訊給我 |
請教Zard大大
Close();與Form2->Close();有何不同?
用
1.Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { //Action=caFree; } compiler OK 但用 1.Form2->Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; }執行時有err. 發表人 - gcpp 於 2005/01/10 21:35:47 |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
插个花:
Form2->Close()并没有真正的delete a form ,只是Call Close to close a form.所以再下Action=caFree; 就会报错;
1.Form2->Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; Form2 = NULL; //加上此句 } 参考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44564~~~静心养德~~~ |
gcpp
一般會員 發表:16 回覆:19 積分:7 註冊:2004-12-29 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
弄错了,会不会是因为您
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action=caFree;//窗体被关闭,同时也释放相应的内存
}
释放相应的内存后,您又有用到此Form,所以导致报错。
而FormClose意为窗口关闭时调用的事件句柄,所以不管您下close();还是Form2->Close();此处的效果是一样的,只是您在onclose中释放相应的内存,而导致再次使用出错,您可以在onclose事件中,作如下处理,就可以知道其实执行close();和Form2->Close();都会去执行onclose事件,问题是出在您是否释放相应的内存,如有错误,还请指正
< class="code">
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if MessageDlg('Close application ?', mtConfirmation,
[mbYes, mbNo], 0) = mrYes then
Action := caFree
else
Action := caNone;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
// form2.Close;
end;
~~~静心养德~~~
|
gcpp
一般會員 發表:16 回覆:19 積分:7 註冊:2004-12-29 發送簡訊給我 |
|
gcpp
一般會員 發表:16 回覆:19 積分:7 註冊:2004-12-29 發送簡訊給我 |
1.Close();
2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
//Action=caFree;
}
compiler OK 執行OK 用
1.Form2->Close();
2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action=caFree;
} compiler OK 執行時有上圖err.
Close()之後在Memory內還留一份Form2資料
Form2->Close();呼叫Action=caFree;就把Form2資料清掉.
deity大大的回答較詳細這題就給deity大大了
|
kill7139
一般會員 發表:3 回覆:1 積分:0 註冊:2015-01-13 發送簡訊給我 |
===================引 用 gcpp 文 章=================== 1.Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { //Action=caFree; } compiler OK 執行OK 用 1.Form2->Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; } compiler OK 執行時有上圖err. Close()之後在Memory內還留一份Form2資料 Form2->Close();呼叫Action=caFree;就把Form2資料清掉. deity大大的回答較詳細這題就給deity大大了 版大不好意思 自己也剛好遇到內存的問題 想問一下 Action=caFree;是什麼意思? 用處? close()不就把視窗關掉了 不能在視窗沒關掉的狀態下清除內存嗎?
------
嗨^^ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |