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

關閉Form的問題

答題得分者是:bass15
irvinehing
初階會員


發表:77
回覆:79
積分:31
註冊:2003-11-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-29 12:23:31 IP:210.186.xxx.xxx 未訂閱
小弟有兩個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-30 15:18:45 IP:218.170.xxx.xxx 未訂閱
小弟層有相關經驗過,不過或許環境不一樣情況會有所不同,我記得的是,如果您的程式跑到 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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-01 14:35:22 IP:219.84.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-04 10:34:25 IP:218.170.xxx.xxx 未訂閱
引言: irvinehing 您好: ShowModal()的Form無法在FormActive 或FormShow時Close..
感謝 bass15 兄: 又讓小弟多學到一樣東西了,謝謝! 蝦程速,有了 K.TOP 尊好。
系統時間:2024-11-25 11:39:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!