C++builder 窗体之间变量传送问题

Fairchild2440 2011-05-24 01:43:54


首先在unit1.h的public中定义一个string

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TButton *Button1;
TLabel *Label1;
TLabel *Label2;
TLabel *Label3;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
AnsiString string;//在form1的public里定义string
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


然后在unit1.cpp中加入如下语句:
string="ABC";
Label3->Caption=string; //此处在form1的Label3处能显示ABC;
Form2->Show();



在unit2.cpp中已经写了#include "Unit1.h"
Form中有label1和Label2
还有如下语句:
Label1->Caption=Form1->string;
Label2->Caption="123";


编译没显示错误,运行,跳出Form2后 Label2处显示123,但label1处确是个空白


疑问:为什么在unit1.h的public中定义的变量string不能将其值传送到Form2中,当然在unit2.cpp中已经包含了unit1.h了
而string在Form1中能正常使用






...全文
151 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
pearling 2011-05-25
  • 打赏
  • 举报
回复
260099867
Fairchild2440 2011-05-24
  • 打赏
  • 举报
回复
太谢谢pearLing了 ,可否加个QQ?
toadzw 2011-05-24
  • 打赏
  • 举报
回复
可以设置一个全司变量,或在接受窗体中设置一个全局变量,就可以在外面设置了;
pearling 2011-05-24
  • 打赏
  • 举报
回复
文件收到了,我也看了。原因是因为你把代码写到了Form2的OnCreate事件当中了,换成到写到Form2的OnActived事件当中就没问题了。
C++ Builder生成的可执行文件是一次性把所有的窗体都调入内存当中的,只是有的没有显示出来,因此当你执行程序的时候Form2已经加载到内存了,这时在Form2中的Label1->Caption=Form1->string这条语句随着OnCreate事件的发生就已经执行过了。而当你Form2->Show()的时候是不执行Form2的OnCreate事件的(记住:这个Form2->Show()只是显示Form2,而不是加载或创建Form2)。把Form2中的那段代码放到OnActived事件当中就可以了,也就是每一次激活Form2都执行这段代码。
Fairchild2440 2011-05-24
  • 打赏
  • 举报
回复
pearLing :文件发了,请注意查收,拜托了.
Fairchild2440 2011-05-24
  • 打赏
  • 举报
回复
上面我写出来了的,要不我把整个东西发给你,在最上面:

然后在unit1.cpp中加入如下语句:
string="ABC";
Label3->Caption=string; //此处在form1的Label3处能显示ABC;
Form2->Show();
先谢谢您的热情帮助
老邓 2011-05-24
  • 打赏
  • 举报
回复
能否把给string赋值的相关代码帖出来?
确定操作的是同一个实例?
Fairchild2440 2011-05-24
  • 打赏
  • 举报
回复
嗯?string在Form1中我是赋了“ABC”啊,而且在Form1中,Label3->Caption=string能正确的显示“ABC”,但在Form2中就不行了
老邓 2011-05-24
  • 打赏
  • 举报
回复
extern PACKAGE TForm1 *Form1
这说明有一个源码处定义了Form1。
但定义后,可曾对string赋值?
你不赋值,当然就是空的了。
pearling 2011-05-24
  • 打赏
  • 举报
回复
你说的这种方法我用过,但是没出现你所说的情况,我的都是正常通过了,不知道你的代码写在了哪个事件里,是不是那个事件没有被激活?代码没有执行呢?如果可以,把你的整个工程文件发送给我吧,我帮你看看。发送到如下邮箱:1789559762@qq.com
Fairchild2440 2011-05-24
  • 打赏
  • 举报
回复
我看网上有人就是这样介绍的,http://topic.csdn.net/t/20021231/09/1315304.html
http://www.photoshopsky.net/it/view-8334-1.html
请各位知道什么说什么

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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