下面是Form1调用Form2的代码:
==================
procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    Form2:=TForm2.create(self);
    Form2.ShowModal;
  except
    Form2.Free;
  end;
end;
==================
以下是Form2的全局变量定义和代码:==================
var
  Form2: TForm2;
  var1:integer=0;implementation{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
begin
  inc(var1);
  edit1.Text:=inttostr(var1);
end;
==================
执行后,可以发现
第1次调用Form2时,edit1.Text显示为2,
第2次调用Form2时,edit1.Text显示为3,
第3次调用Form2时,edit1.Text显示为4
以后都是加1....两个问题:
1、第1次调用Form2时TForm2.FormCreate执行了2次?
2、第2次调用Form2时Form2定义的变量未重新初始化?
  (我在TForm2.FormClose中加入Action:=cafree;也不行)请高手指点!

解决方案 »

  1.   

    1.先把Form2设置为手动创建。
    2.在Form2的Destroy事件中增加代码 Form2:=nil;
      

  2.   

    1.先把Form2设置为手动创建。抱歉,这个问题是我一时疏忽,呵呵!2.在Form2的Destroy事件中增加代码 Form2:=nil;这个方法不行,变量依然在累加。
      

  3.   

    基本常识,既然是全程变量,它就不属于form2,每次累加是正常的
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        Form2:=TForm2.create(self);
        Form2.ShowModal;
      finally
        Form2.Free;
      end;
    end;
      

  5.   

    keiy() ( ) 信誉:105  2006-6-13 20:12:15  得分: 0  
     
     
       
    基本常识,既然是全程变量,它就不属于form2,每次累加是正常的  
     
    这个基本常识,看样子很多人都不清楚。
    哎!惭愧啊!那有没有属于Form2自己的变量,又能让调用Form2的Form1赋值得变量呢?
      

  6.   

    那有没有属于Form2自己的变量,又能让调用Form2的Form1赋值得变量呢?
    ----
    tform2的public里的变量
      

  7.   

    那有没有属于Form2自己的变量,又能让调用Form2的Form1赋值得变量呢?
    ----
    tform2的public里的变量=================
    这个不行的,我早测试过了。好像只有全程变量了!
      

  8.   

    -------tform2----------
    type
      TForm2 = class(TForm)
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        var1:integer;
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
    begin
      inc(var1);
      edit1.Text:=inttostr(var1);
    end;
    --------------tform1--------------
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      try
        Form2:=TForm2.create(self);
        Form2.ShowModal;
      except
        Form2.Free;
      end;
    end;
    我都试过了,不知道你怎么弄
      

  9.   

    其实这是两个问题:  private
        { Private declarations }
        var1:integer;
      public
        var2:integer;
        { Public declarations }
      end;var
      Form2: TForm2;
      var3:integer;
    上面定义的变量,var1和var2都是Form2的变量,无法被调用Form2的Form1所使用,当Form2窗口free后变量被释放,再次调用Form2后,重新初始化。var3是全程变量,可以被Form1所使用,但当Form2窗口free后,变量不会被释放,再次调用Form2后,var3依然保持上次调用Form2后的值。
    keiy() 说的对,只是这个常识大多数人不清楚!