我有一个模板form,名为frmScan;
在frmScan中,我定义了一个变量aaa 。
public
    { Public declarations }
end;var
  frmScan: TfrmScan;
  aaa    :Integer ;implementation然后在formCreate事件中,赋值给aaa 
aaa := 0 ;
在其它事件中,会把aaa的值改为 1 .
然后我通过frmScan生成了10个新的form.代码如下:
var f:TfrmScan ;
    i:Integer ;
begin
   while i:= 0 to 10 do
   begin
     application.CreateForm(TfrmScan,F);
     f.Name := 'frm_scan' + IntToStr(i) ;
     f.show ;
     f.SendToBack ;//把新建的页放在最后
   end ;
end ;但是有下面这个问题。
当我关闭frmScan1时,frmScan2就可以看到了。
但是由于我在frmScan1中已经把aaa改成了1.
在frmScan2中,我的aaa的值也变成了1.也就是说,如果frmScan1中把aaa的值改成了1,
那后面的frmScan2,frmScan3,frmScan4,frmScan5,frmScan6,的aaa的值都变成了1,
为什么会这样。???
应该怎样才能使 frmScan1中改变的值不影响其它的form的值???

解决方案 »

  1.   

    兄弟,你犯的这种错误,我已见过太多了。我发觉很多程序都喜欢这样;包括我公司的几位兄弟。面对这种情况,我总是不怨其烦地告诉他们:将var下面的变量移到类的public部分,什么问题都解决了;在单元里的var部分定义的东西是全局变量;而定义在类的public部分的则是类的属性,类的属性的专有的,每生成一个类的对象,该对象都会有一个他自己的属性,而不会共用;如果是全局变量,则程序从执行开始,在内存中就一份,你在某个地方改变了其值,所有用到他的地方也会看到这个改变。你如果用类的属性的话,你改变了该值,对只有这个类的实例内部才能看到。