在form1里面有1个数组a[0..30].一个procedure pA,,pA里面要用刀数组a
form1.showmodal后,按form1的按钮执行form2.showmodal,而form2需要调用form1的pA,但是跟踪的时侯发现form2调用pA的时侯,A全为为nil,但是form1内部自己调用则为正常数据.....请问,怎么回事,该怎么办?(全局变量除外)

解决方案 »

  1.   

    form2需要调用form1的pA
    你用 Owner 传的???
      

  2.   

    从描述中无法确认楼主在Form2中是如何调用Form1的成员变量和成员过程的。
    只能写个例子给你,不知道与你的情况是否一致:Form1的代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      public
        A : array [0..30] of Pointer;
        procedure pA;
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.pA();
    var
      s : String;
      i : Integer;
    begin
      s := '';
      for i := Low(A) to High(A) do
        if A[i] <> nil then s := s + Format('%d', [DWORD(A[i])]) + ' , ';
      ShowMessage (s);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      i : Integer;
    begin
      for i := Low(A) to High(A) do A[i] := @i;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2.ShowModal;
    end;end.
    Form2的代码:
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      end;var
      Form2: TForm2;implementationuses Unit1;{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
    begin
      Form1.pA;
    end;end.
      

  3.   

    program Project2;uses
      Forms,
      Unit1 in 'Unit1.pas' {Form1},
      Unit2 in 'Unit2.pas' {Form2};{$R *.res}begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.
    ------------------------------
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure FormCreate(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        a: array[0..30] of integer;
      public
        procedure pa();
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
      a[30] := 100;
    end;procedure TForm1.pa;
    begin
      ShowMessage(IntToStr(a[30]));
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2 := TForm2.Create(self);
      Form2.ShowModal;
      FreeAndNil(Form2);
    end;end.-----------------------------------------------
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation{$R *.dfm}
    uses unit1;procedure TForm2.Button1Click(Sender: TObject);
    begin
      TForm1(Owner).pa;
    end;end.