關閉Form的問題 |
答題得分者是:bass15
|
irvinehing
初階會員 發表:77 回覆:79 積分:31 註冊:2003-11-12 發送簡訊給我 |
小弟有兩個form,frmMain是Auto-createforms(主程式),frmPersonnelProfile是Available forms。 frmPersonnelProfile由Mainmenu點選後,產生出來的,程式碼如下:
TfrmPersonnelProfile *frmPersonnelProfile = new TfrmPersonnelProfile(this); frmPersonnelProfile->Caption = ((TMenuItem *)Sender)->Caption.SubString(2, ((TMenuItem *)Sender)->Caption.Length()); frmPersonnelProfile->ShowModal(); delete frmPersonnelProfile;當frmPersonnelProfile的FormActivate有錯誤產生時,小弟想將frmPersonnelProfile結束掉,並回到frmMain主程式來,程式碼如下: void __fastcall TfrmPersonnelProfile::FormActivate(TObject *Sender) { try { AnsiString cmd = "select * from tb_personnel_profile"; cmd = " order by name"; ZQuery1->Close(); ZQuery1->SQL->Clear(); ZQuery1->SQL->Add(cmd); ZQuery1->Open(); } catch(Exception &e) { Application->MessageBoxA(e.Message.c_str(), "Message", MB_OK); Close(); } } void __fastcall TfrmPersonnelProfile::FormClose(TObject *Sender, TCloseAction &Action) { try { ZQuery1->Active = false; } catch(Exception &e) { Application->MessageBoxA(e.Message.c_str(), "Message", MB_OK); Close(); } }但是,小弟發現當錯誤產生後,並不會執行到Close()。把Close()換成Free()的話,並不會Focus到frmMain上。 請問該怎麼做呢? |
smartboss
初階會員 發表:19 回覆:93 積分:42 註冊:2004-12-29 發送簡訊給我 |
小弟層有相關經驗過,不過或許環境不一樣情況會有所不同,我記得的是,如果您的程式跑到 catch 之後,只能做些更為簡單的動作,如果像您做的Application->MessageBoxA(e.Message.c_str(), "Message", MB_OK);
可能會被這行給 hold 住了,您試著把它改成如下試試看
[code]
catch(Exception &e)
{
// 這行停掉試試 Application->MessageBoxA(e.Message.c_str(), "Message", MB_OK);
frmPersonnelProfile->Close();
} [\code] 蝦程速,有了 K.TOP 尊好。
|
bass15
高階會員 發表:24 回覆:171 積分:119 註冊:2003-10-27 發送簡訊給我 |
irvinehing 您好:
ShowModal()的Form無法在FormActive 或FormShow時Close.. 請參考以下做法把FormActivate裡面作的事移到別的Function來做..
TfrmPersonnelProfile *frmPersonnelProfile = new TfrmPersonnelProfile(this); frmPersonnelProfile->Caption = ((TMenuItem *)Sender)->Caption.SubString(2, ((TMenuItem *)Sender)->Caption.Length()); if(frmPersonnelProfile->Init()) frmPersonnelProfile->ShowModal(); else ShowMessage("錯誤了!") delete frmPersonnelProfile; 以下是TfrmPersonnelProfile .h 加上 bool __fastcall Init(); .cpp bool __fastcall TfrmPersonnelProfile::Init() { try { AnsiString cmd = "select * from tb_personnel_profile"; cmd = " order by name"; ZQuery1->Close(); ZQuery1->SQL->Clear(); ZQuery1->SQL->Add(cmd); ZQuery1->Open(); } catch(Exception &e) { return false; } return true; } void __fastcall TfrmPersonnelProfile::FormClose(TObject *Sender, TCloseAction &Action) { try { ZQuery1->Active = false; } catch(Exception &e) { Application->MessageBoxA(e.Message.c_str(), "Message", MB_OK); } } |
smartboss
初階會員 發表:19 回覆:93 積分:42 註冊:2004-12-29 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |