unit unit1
interface
uses ……;
var mylevel:string;
unit unit2
interface
uses ……;
var form2:TForm2;
uses unit1,unit3;
实现部分
produce button1click(sender:tobject)
 mylevel:='user';
 table1.filter:='……';
 table1.filtered:=true;
 ……
 edit1.text:=mylevel;
 form3.showmodal;
end;unit unit3
interface
uses ……;
var form3:TFrom;
uses unit1,unit2;
实现部分
produce formcreate(参数)
 edit1.text:=form2.edit1.text;
 edit2.text:=mylevel;
 edit3.text:=form2.table1['name'];
end;为什么UNIT3中,edit1和edit2都没有值,为空,而edit3中却有name的值呢?
mylevel是在unit1的单元接口部分定义为全局变量的。
为什么FORM2的edit1.text的值无法传递,但form2.edit1.name和form2.table['name']却可以呢?
先给各位大哥大姐说声谢谢了。:)

解决方案 »

  1.   

    因为你定义的全局变量是在Unit!中,而对其给值是在unit2中有效的,如果要达到你的效果;可以在unit3中不引用unit1,试试!也即你引用的是unit1中的变量!
      

  2.   

    你在form1的public里定义unit1...
    public
    i:integer;//
    unit2.implement
    uses unit1.procedure Tform2.button1click(sender:object);
    begin
    form1.i:=10 // 给值end;
      

  3.   

    unit Unit1;//单元一
    interface
    uses
      Windows,Forms;
    type
      TForm1 = class(TForm)
      private
        { Private declarations }
      public
        { Public declarations }
        mylevel:string;//定义在这!!
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    end.unit unit2//单元二
    interface
    uses ……;
    var form2:TForm2;
    uses unit1,unit3;
    实现部分
    produce button1click(sender:tobject)
     Form1.mylevel:='user';
     table1.filter:='……';
     table1.filtered:=true;
     ……
     edit1.text:=Form1.mylevel;;//加上对象名
     form3.showmodal;
    end;unit unit3//单元三
    interface
    uses ……;
    var form3:TFrom;
    uses unit1,unit2;
    实现部分
    produce formcreate(参数)
     edit1.text:=form2.edit1.text;
     edit2.text:=Form1.mylevel;//加上对象名
     edit3.text:=form2.table1.FieldByName('name').AsString;
    end;
      

  4.   

    没有用啊。
    不管是form1.mylevel还是直接定义成全局变量,都没有用。