在Form1中声明的变量继承到Form2后,值就丢失了-高手赐教

qiguosheng 2007-04-06 02:04:42
以下是摘录的两个个窗口定义的主要部分,内容特简单,请不要怕难读,一晃就明白了~~
一共有两个窗体:Form1、From2;在Form1中声明的变量继承到Form2后,值就丢失了,我是在TForm1的FormCreate中给变量赋值的;如果在Form的初始化函数中赋值,变量就可以得到正确的值,为什么????

Form1 代码如下:
Form1.h
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall Button1Click(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
private: // User declarations
protected: // User declarations
String strProgram;
void setProgram(String _strProgram);
String getProgram();

virtual int SetNull(); //释放窗体类指针
virtual int iniForm();
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------

Form1.cpp
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)
{
// iniForm();

}
//---------------------------------------------------------------------------

void TForm1::setProgram(String _strProgram)
{
strProgram = _strProgram;
}
//---------------------------------------------------------------------------

String TForm1::getProgram()
{
return strProgram;
}
//---------------------------------------------------------------------------

//虚拟方法
int TForm1::iniForm()
{
setProgram("Form1");
return 1;
}
//---------------------------------------------------------------------------

//虚拟方法
int TForm1::SetNull()
{
Form1 = NULL;
return 1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
SetNull();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
String a;
a = getProgram();
ShowMessage(a);
}
//---------------------------------------------------------------------------

/////////////////////////////////////////////////////////////////////////////
Form2 代码如下:
Form2.h
//---------------------------------------------------------------------------
class TForm2 : public TForm1
{
__published: // IDE-managed Components
private: // User declarations
protected: // User declarations
virtual int SetNull(); //释放窗体类指针
virtual int iniForm();

public: // User declarations
__fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------

Form2.cpp

TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm2(Owner)
{
}
//---------------------------------------------------------------------------

int TForm2::iniForm()
{
setProgram("Form2");
return 1;
}
//---------------------------------------------------------------------------

int TForm2::SetNull()
{
Form2 = NULL;
return 1;
}
//---------------------------------------------------------------------------
...全文
203 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim@luckeeinc.com 2007-04-06
  • 打赏
  • 举报
回复
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm1(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
TForm1::iniForm();
TForm1::setProgram("Form2");
String b = TForm1::getProgram();
ShowMessage(b);
}
//---------------------------------------------------------------------------
n27741 2007-04-06
  • 打赏
  • 举报
回复
FFSB()...() ( ) 信誉:100 Blog 加为好友 2007-04-06 08:34:57 得分: 0

//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm2(Owner) ==> TForm1(Owner)//????
{
}
这个构造函数似乎有问题


daydayup234 2007-04-06
  • 打赏
  • 举报
回复
一般我碰到的问题是:
假如有Form1、Form2两个窗体。Form1是主窗体,当然它构造了。Form2是“副”窗体,Form2只工程可用,没有构造。
在Form1中动态构造Form2,模态显示Form2。
为了在Form2中改变Form1中某个数据,在Form2中定义一个Public的数据指针,
Form1中构造Form2后立即传数据的指针等于Form2中定义的那个。
FFSB 2007-04-06
  • 打赏
  • 举报
回复
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm2(Owner) ==> TForm1(Owner)//????
{
}
我来看看CB 2007-04-06
  • 打赏
  • 举报
回复
顶,应该说详细一些。

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧