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

請問有關動態產生FORM的參數傳遞問題??

尚未結案
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-15 09:47:58 IP:218.163.xxx.xxx 未訂閱
Sorry ...之前有發錯區 大家好:請問有關動態產生FORM,參數值傳遞的問題? 我寫了一個MDI的程式,其中有二個子視窗,都是用new產生的,由第一個子視窗,產生第二個子視窗,然後我想要把childForm的VCL元件,例如Edit的Text傳到下一個ChildForm的Edit內,可是一直產生存取錯誤,請問有人可以幫我解答疑問嗎? 這個是主MDIForm的產生第一個childForm的程式: void TMDIForm::createcdesign(int) { TCdesign *NewChildFrm = new TCdesign(Application); SnumFrm = IntToStr(numFrm); NewChildFrm->Caption = "New_Case(processing)_" SnumFrm; NewChildFrm->Name = "NewChildFrm" SnumFrm; NewChildFrm->ClientHeight=542; NewChildFrm->ClientWidth=654; numFrm ; } 這個是由第一個childForm產生的第二個ChildForm void __fastcall TCdesign::previewClick(TObject *Sender) { TPreview *NewChildFrmP = new TPreview(Application); NewChildFrmP->Caption = "Preview(Processing)_" IntToStr(Pnum); NewChildFrmP->Name = "Preview" IntToStr(Pnum); NewChildFrmP->ClientHeight=564; NewChildFrmP->ClientWidth=862; Pnum ; } --我在第一個childForm中有一個Edit1->text="XXXX"; --想把值傳到第二個ChildFrom的Edit1中,請問有人可以幫幫我嗎? 發表人 - taishyang 於 2004/09/15 09:54:01
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-16 00:34:01 IP:221.169.xxx.xxx 未訂閱
erasy:我看你的程式所謂第一個子視窗,第二個子視窗都是你先寫 好的Cdesign.Cpp及Preview.Cpp如果 --我在第一個childForm中有一個Edit1->text="XXXX"; --想把值傳到第二個ChildFrom的Edit1中,請問有人可以幫幫我嗎? 你可以直接將第二個ChildFrom(Preview.Cpp) #include "Cdesign.h"即可不是嗎? 如此你就可以引用第一個childForm的Edit1->text 請參考! Andy Chang
------
Andy Chang
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-16 10:33:08 IP:163.23.xxx.xxx 未訂閱
andychang1690您好: 這是我在ChildForm(Preview)中寫的 Edit1->Text=Cdesign->Edit1->Text; 我已經有include,可是會發生下面的訊息:    
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-16 11:26:19 IP:221.169.xxx.xxx 未訂閱
erasy: childForm的FormStyle 先設成 fsNormal Project->Option->form將你的childForm移到Available forms 試試! Andy Chang
------
Andy Chang
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-16 12:11:14 IP:163.23.xxx.xxx 未訂閱
Andy Chang你好: 我原本的ChildForm Style都是fsMDIChild,而都有搬到Available forms.. ..而照您的方法,還是會造成上面的情形
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-16 12:23:23 IP:221.169.xxx.xxx 未訂閱
引言: Andy Chang你好: 我原本的ChildForm Style都是fsMDIChild,而都有搬到Available forms.. ..而照您的方法,還是會造成上面的情形
erasy:奇怪,我剛剛試一下我測試程式沒問題!傳遞正常。 你方便Post你的程式嗎? Andy Chang
------
Andy Chang
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-16 12:36:18 IP:163.23.xxx.xxx 未訂閱
Andy Chang您好: 第一段是主MDIForm的程式: //---------------------------------------------------------------------------    #include  #pragma hdrstop #include "Unit1.h" #include "Unit2.h" #include "Unit3.h" #include "Unit4.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMDIForm *MDIForm; AnsiString SnumFrm; static int numFrm=0; int TMDIForm::createcdesign(int) { TCdesign *NewChildFrm = new TCdesign(Application); SnumFrm = IntToStr(numFrm); NewChildFrm->Caption = "New_Case(processing)_" SnumFrm; NewChildFrm->Name = "NewChildFrm" SnumFrm; NewChildFrm->ClientHeight=542; NewChildFrm->ClientWidth=654; return numFrm ; } //--------------------------------------------------------------------------- __fastcall TMDIForm::TMDIForm(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TMDIForm::Exit1Click(TObject *Sender) { Close(); //關閉父視窗; } //--------------------------------------------------------------------------- void __fastcall TMDIForm::Cascade1Click(TObject *Sender) { MDIForm->Cascade(); //子視窗排列方式 } //--------------------------------------------------------------------------- void __fastcall TMDIForm::ToolButton1Click(TObject *Sender) { createcdesign(numFrm); } //--------------------------------------------------------------------------- void __fastcall TMDIForm::New1Click(TObject *Sender) { createcdesign(numFrm); } //--------------------------------------------------------------------------- 第二段是ChildForm(Cdesign) //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "Unit2.h" #include "Unit3.h" #include "Unit4.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TCdesign *Cdesign; AnsiString test; static int Pnum =0; //--------------------------------------------------------------------------- __fastcall TCdesign::TCdesign(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TCdesign::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; //關閉子視窗 } //--------------------------------------------------------------------------- void __fastcall TCdesign::previewClick(TObject *Sender) { TPreview *NewChildFrmP = new TPreview(Application); NewChildFrmP->Caption = "Preview(Processing)_" IntToStr(Pnum); NewChildFrmP->Name = "Preview" IntToStr(Pnum); NewChildFrmP->ClientHeight=564; NewChildFrmP->ClientWidth=862; Pnum ; } //--------------------------------------------------------------------------- void __fastcall TCdesign::FormCreate(TObject *Sender) { for(int i=0;i<7;i )//把每個Label--AB1~7的Caption存在陣列內; { lbname[i 1] = ((TLabel *)FindComponent("AB" IntToStr(i 1)))->Caption; // ((TEdit *)FindComponent("EB" IntToStr(i 1)))->Text = lbname[i 1]; //上面(50行)是測試,把AB1~7的Capation寫進EB內; MDIForm->reclbname[i 1] = lbname[i 1]; //上面(52行)是把Label--AB1~7的Caption存在MDIForm的reclbname陣列內,以供Preview使用; } } //--------------------------------------------------------------------------- void __fastcall TCdesign::previewEnter(TObject *Sender) { for(int i=0;i<7;i ) { if(i<2) ebvalue[i 1] = ((TComboBox *)FindComponent("CBB" IntToStr(i 1)))->Text; else ebvalue[i 1] = ((TEdit *)FindComponent("EB" IntToStr(i-1)))->Text; MDIForm->recebvalue[i 1] = ebvalue[i 1]; } } //--------------------------------------------------------------------------- 第三段是 //--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include "Unit2.h" #include "Unit3.h" #include "Unit4.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TPreview *Preview; //--------------------------------------------------------------------------- __fastcall TPreview::TPreview(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TPreview::FormClose(TObject *Sender, TCloseAction &Action) { Action = caFree; //關閉子視窗 } //--------------------------------------------------------------------------- void __fastcall TPreview::closeClick(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TPreview::FormCreate(TObject *Sender) { // PListBox->Items->Add(MDIForm->con1); for(int i=0;i<7;i ) PListBox->Items->Add(IntToStr(i 1) " . " MDIForm->reclbname[i 1] MDIForm->recebvalue[i 1]); Edit1->Text=Cdesign->EB1->Text; } //---------------------------------------------------------------------------
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-16 12:39:16 IP:163.23.xxx.xxx 未訂閱
然後EB1是ChildForm(Cdesign)的TEdit元件
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-09-16 13:57:54 IP:221.169.xxx.xxx 未訂閱
erasy:抱歉!吃飯去也。
你的錯誤發生在第三段
void __fastcall TPreview::FormCreate(TObject *Sender)
{
  // PListBox->Items->Add(MDIForm->con1);
  for(int i=0;i<7;i  )
    PListBox->Items->Add(IntToStr(i 1)   " . "   MDIForm->reclbname[i 1]   MDIForm->recebvalue[i 1]);
    Edit1->Text=Cdesign->EB1->Text; // 這行拿掉
}
紅字部分!因為你第二段動態產生視窗所以Cdesign->並沒有被執行。而是NewChildFrm->Name = "NewChildFrm"   SnumFrm;被執行。
所以我建議第二段改為
  NewChildFrmP->Caption = "Preview(Processing)_"   IntToStr(Pnum);
  NewChildFrmP->Name = "Preview"   IntToStr(Pnum);
  NewChildFrmP->ClientHeight=564;
  NewChildFrmP->ClientWidth=862;
  NewChildFrmP->Edit1->Text=Edit1->Text; // 加入這行
  NewChildFrmP->Show();
  Pnum  ;
請參考!另外一件事你的矩陣設定很有意思!?
for(int i=0;i<7;i  )//把每個Label--AB1~7的Caption存在陣列內;
{
  lbname[i 1] = ((TLabel *)FindComponent("AB" IntToStr(i 1)))->Caption;
  // ((TEdit *)FindComponent("EB"   IntToStr(i 1)))->Text = lbname[i 1];
  //上面(50行)是測試,把AB1~7的Capation寫進EB內;
  MDIForm->reclbname[i 1] = lbname[i 1];
  //上面(52行)是把Label--AB1~7的Caption存在MDIForm的reclbname陣列內,以供Preview使用;
}
lbname[],ebvalue[],reclbname[],recebvalue[]。是從零(0)開始
你好像是從一(1)開始?
Andy Chang
------
Andy Chang
erasy
一般會員


發表:13
回覆:16
積分:5
註冊:2004-07-20

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-09-16 14:43:46 IP:218.163.xxx.xxx 未訂閱
Andy Chang您好: 謝謝你的幫忙...我一直以為childFrom(Cdesign)建立之後,再以呼叫就可以了... 因你有提到說:因為你第二段動態產生視窗所以Cdesign->並沒有被執行,我有想到,不過苦於不知如何才能得到已建立好的Cdesign內,VCL元件的值..看完你的提示之後,才了解.... 而陣列的設計...是為了符合TLabel的編號..所以有些怪怪的.... 真是感謝您的協助...
系統時間:2024-05-06 20:49:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!