動態建立MDI Child Form時出現的問題… |
答題得分者是:jow
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
我已經有一個MDI Form了…按下MDI Form上的一個button後,要動態建立幾個MDI Child Form
可是當執行到Form1->new TForm1(Application)時,總會出現"No MDI Forms are currently active", 但明明就已經有MDI Form了…不知道要怎麼解決…謝謝 我的程式架構為兩個auto-create form, 其中一個為MDI Form(一開始visible = false) 當另一個aotu-create form按下button後,呼叫MDI Form->Show,同時設為focus... 而在MDI Form的Show Event則執行動態產生MDI Child Form的程式… 編輯記錄
ychch0819 重新編輯於 2007-11-05 12:45:59, 註解 無‧
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
這個我有試過…我MDI Form的名稱為ABC_Form
我寫成Form1 = new TForm1(ABC_Form)仍然是一樣的訊息, 我剛剛試了一下…把本來的MDIForm一開始設為Visible = true,另一個auto-create form一開始設為 false 這樣就可以…但是我程式Form出現的順序剛好要相反啊…有什麼辦法可以解決嗎 ===================引 用 jow 文 章=================== Form1->new TForm1(Application) Owner 指定為 你的 MDIMainForm |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
測試動作:
(1) 開兩個Form, 一個命名 frmMain, 另一個命名 frmChild, 如此 你現在有兩個自TForm繼承下來的Form class, TfrmMain 及 TfrmChild (2)從 Project->Options->Forms->Auto-Create Forms中 將 frmChild 移置到 Available Forms. 如此只讓程式自動以frmMain為物件變數來產生 一個TfrmMain. 而TfrmChild將動態的由程式產生. 以下為測試程式碼: TfrmMain [code cpp] //--------------------------------------------------------------------------- #ifndef fMainH #define fMainH //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp><br />//--------------------------------------------------------------------------- class TfrmMain : public TForm { __published: protected: TMainMenu *mm; void __fastcall DO_CREATE_MDIChild(TObject* Sender); private: public: __fastcall TfrmMain(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TfrmMain *frmMain; //--------------------------------------------------------------------------- #endif [/code] [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "fMain.h" #include "fChild.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmMain *frmMain; //--------------------------------------------------------------------------- __fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) { this->FormStyle = fsMDIForm; this->WindowState = wsMaximized; mm = new TMainMenu(this); TMenuItem *mi = new TMenuItem(mm); mi->Caption = "New Child"; mi->OnClick = DO_CREATE_MDIChild; mm->Items->Add(mi); this->Menu = mm; } //--------------------------------------------------------------------------- void __fastcall TfrmMain::DO_CREATE_MDIChild(TObject* Sender) { new TfrmChild(this); } //--------------------------------------------------------------------------- TfrmChild [code cpp] //--------------------------------------------------------------------------- #ifndef fChildH #define fChildH //--------------------------------------------------------------------------- #include #include #include #include <Forms.hpp><br />//--------------------------------------------------------------------------- class TfrmChild : public TForm { __published: void __fastcall FormClose(TObject *Sender, TCloseAction &Action); private: public: __fastcall TfrmChild(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TfrmChild *frmChild; //--------------------------------------------------------------------------- #endif [/code] [code cpp] //--------------------------------------------------------------------------- #include #pragma hdrstop #include "fChild.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TfrmChild *frmChild; //--------------------------------------------------------------------------- __fastcall TfrmChild::TfrmChild(TComponent* Owner) : TForm(Owner) { this->FormStyle = fsMDIChild; } //--------------------------------------------------------------------------- void __fastcall TfrmChild::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; } //--------------------------------------------------------------------------- [/code] 謹供參考.....^_^ |
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
|
ychch0819
一般會員 發表:25 回覆:29 積分:15 註冊:2006-08-09 發送簡訊給我 |
嗯…現在的問題就是你所說的…XD
所以我也不知道這樣還算不算MDI Application… 現在已經選擇退而求其次的方法… ===================引 用 jow 文 章=================== Application->MainForm 不是 MDIForm??? 那就將Main Form設定成 非 MDIForm的那一個, 可是這樣的話, MDIForm也許可以Show得出來, 可是在動態產生Child Form時, 會產生問題... 另外,這個 Application 還算是MDI ???? ^_^?? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |