erasy
一般會員
發表:13 回覆:16 積分:5 註冊:2004-07-20
發送簡訊給我
|
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
發送簡訊給我
|
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
發送簡訊給我
|
andychang1690您好:
這是我在ChildForm(Preview)中寫的
Edit1->Text=Cdesign->Edit1->Text;
我已經有include,可是會發生下面的訊息:
|
andychang1690
資深會員
發表:20 回覆:694 積分:442 註冊:2003-03-14
發送簡訊給我
|
erasy:
childForm的FormStyle 先設成 fsNormal
Project->Option->form將你的childForm移到Available forms
試試! Andy Chang
------ Andy Chang
|
erasy
一般會員
發表:13 回覆:16 積分:5 註冊:2004-07-20
發送簡訊給我
|
Andy Chang你好:
我原本的ChildForm Style都是fsMDIChild,而都有搬到Available forms..
..而照您的方法,還是會造成上面的情形
|
andychang1690
資深會員
發表:20 回覆:694 積分:442 註冊:2003-03-14
發送簡訊給我
|
引言:
Andy Chang你好:
我原本的ChildForm Style都是fsMDIChild,而都有搬到Available forms..
..而照您的方法,還是會造成上面的情形
erasy:奇怪,我剛剛試一下我測試程式沒問題!傳遞正常。
你方便Post你的程式嗎? Andy Chang
------ Andy Chang
|
erasy
一般會員
發表:13 回覆:16 積分:5 註冊:2004-07-20
發送簡訊給我
|
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
發送簡訊給我
|
然後EB1是ChildForm(Cdesign)的TEdit元件
|
andychang1690
資深會員
發表:20 回覆:694 積分:442 註冊:2003-03-14
發送簡訊給我
|
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
發送簡訊給我
|
Andy Chang您好:
謝謝你的幫忙...我一直以為childFrom(Cdesign)建立之後,再以呼叫就可以了...
因你有提到說:因為你第二段動態產生視窗所以Cdesign->並沒有被執行,我有想到,不過苦於不知如何才能得到已建立好的Cdesign內,VCL元件的值..看完你的提示之後,才了解.... 而陣列的設計...是為了符合TLabel的編號..所以有些怪怪的....
真是感謝您的協助...
|