全局变量
  比如在 form1中的 public 或interface 下定义一个全局变量.
  form1 中已对它定义.
  form2 中调用去老是空值;

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs,dateutils, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      s:string;implementation
           uses unit2;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    s:=edit1.text;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    form2.show;
    end;end.
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        Edit1: TEdit;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementation
    uses unit1;{$R *.dfm}procedure TForm2.FormCreate(Sender: TObject);
    begin
    edit1.Text:=s;
    end;end.
      

  2.   

    ???为什么要这样!unit2中TForm2.FormCreate的直接写为
    procedure TForm2.FormCreate(Sender: TObject);
    begin
    edit1.Text:=form1.edit1.text;
    end;
    就好了,不必再定义一个s变量
      

  3.   

    好像是不行, 99guo的方法也不行, 99guo的方法只适合窗体第一次创建时有用,  把form1.edit1.text改变一下, 在试试, 就不好用了, 期待答案
      

  4.   

    对,同意楼上的,循环引用是相当危险的,也可能就是你问题产生的原因
    在Unit2里已经USE了unit1,就不要在Unit1里面再USE unit2
      

  5.   

    另外一个,按你的意思(我推测),Uint2中里的TForm2.FormCreate里应该是
    edit1.Text:=Unit2.s;
    或者写成 99guo(风吹叶)说的那样也行
      

  6.   

    那你们没有人用过全局变量
    form1 中附值.
    from2 中调用.
      

  7.   

    全局变量是相对概念,Unit1和Unit2在关系层次上是水平的,就算你Use了其他Unit也是一样的,除非你在程序中又在Unit1和Unit2外面定义的S
    你定义的S就相当于(打个比方)是类UNIT1中的一个成员变量,正常情况下因该是一种私有的变量,而通过Use了以后,就相当于友元的样子,不知你懂了没有。
    那个S根本就不能叫全局变量
      

  8.   

    你想要每次改变就把代码写在Formshow里
    unit2中TForm2.Formshow的写为
    procedure TForm2.Formshow(Sender: TObject);
    begin
    edit1.Text:=form1.edit1.text;
    end;