汗颜,蒙赐教不胜感激!!在两个Form间传递参数时为啥出错?(100分)

  • 主题发起人 主题发起人 ranyan_tulip
  • 开始时间 开始时间
R

ranyan_tulip

Unregistered / Unconfirmed
GUEST, unregistred user!
在Form1的FormCreate中用Create生成二维数组SpeedButton若干个,SpeedButton的OnClick事件全都调用同一过程,在过程中对一全局变量赋值后,调出Form2,但在Form2中取Form1中全局变量的值,却总得到在FormCreate中赋的值,而不是在过程中改变后的值,不知其原因.

 
对“却总得到在FormCreate中赋的值”一句不台明白,
如果是指Form2的FormCreate,那你所说的情况,
Form2一定是在OnClick事件中动态建立的,
由于执行的先后顺序,就会出现该情况。
先建立Form2,
再对全局变量赋值后,
即可解决。
 
贴一段代码吧,看的清楚点儿
 
按他所描述的应该是这样:
1 生成form1form2
2 form1 create事件 生成speedbutton,初始化全局变量
3 单击speedbutton 改全局变量
4 form2中调用全局变量
我认为错误可能在3,改的不是全局变量而是一个同名的局部变量
 
由于外出不能及时回答对各位深感抱歉,主要是这样:
Form1设置全局变量G1,G2,在FORM1的FORMCREATE用CREATE生成一数组的BUTTON,并将之ONCLICK:=PROCEDURE1(为一已定义好的过程)、在PROCEDURE1中改变全局变量G1、G2的值并调用Form2,在FORM2的FORMCREATE中接收G1,G2。G1,G2的值却不为在FORM1的PROCEDURE1中改变的值。
与此问题类似的是:在FORM1中对一数据库的记录进行修改、增加等并POST后,关闭此库,在FORM2中重新打开此库,读取记录值,却总是以前的数据,不是刚在FORM1中改变的值。我在库中只设置SECOND INDEX,未设置关键字,故TABLE属性中的CACHEUPDATA 不能用,是不是与此相关?不是,会是啥原因?请指教!
 
1.Easy: 因为Button没有被单击,Procedure过程没有执行,当然g1,g2没改变,
可以用Button1.click,或Procedure(Button1)调用就可以了

2:
Table1.Refresh;
 
为什么不专门作一个unit交换数据和共用的过程和函数,我觉得用个Gloab.pas是个
很好的方法,不知道各位大虾如何看

用TQuery作数据库是很不错的,特别是C/S还是不要用Table的为妙
 
Thanks yours!
 
mikecool:

Glob.pas是一个好方法, 但封装性不是很好, 象他这样的例子,
其实就简单地将G1, G2封装在Form1里就足够了.

我一般是将一处修改, 多处引用的变量才放到glob.pas里的, 而且最好是
常量变量函数分开成3个pas.(我一般还有一个errcode.pas)
 
1. "FormCreate中赋的值" Form1,Form2是否是同一个类(TForm)的两个对象,如果是,则在生存Form2的同时还要对g1,g2赋值.
2.在对数据库操作时,是否注意他的状态、属性了.
 
请问form2是否是动态生成! 如果是在生成form2时,将调用form1.creat(),并将变量重新赋值!
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
748
import
I
后退
顶部