向大家请教,在delphi中,比如说一个工程建立了两个窗体(就应该有相应的两段原程序),在form1窗体中定义的变量a,能不能在form2窗体中直接通过Tform1.a的这种形式引用,如果不行,能不能通过其他的方法,直接引用其他窗体的变量?????????????????????????

解决方案 »

  1.   

    将变量a在form1窗体中定义成Pubilc,在另外的窗体中可以这样:
     with TForm1.Create(Application) do
     begin
        a:= xxx;
     end;
    要在引用的窗体的Uses 语句加上form1的单元。
      

  2.   

    可以啊,把变量定义为公有变量,另一个窗体就可以访问了啊,例如:
    type
      TForm1 = class(TForm)  public
        a:string;
      end;
    在TForm2中就可以访问
    Form1.a;
      

  3.   

    首先要在form2中的use中加入form1,需要引用的form1的变量要加在form1的public区。
      

  4.   

    听大家这么一说,我觉得在delphi中的类方面的东西和c++中的类的区别挺大的哦!!!在c++中如果把成员定义为公有的,只是能够让相应的对象能够直接访问,如果把成员定义为私有的,只能构通过类中的公有成员进行访问.(用了不久的delphi了,还没有认真的看完过一本delphi的书,一直都是直接甩起手就用,真是惭愧)听了大家说的,我现在有了一些理解了;在delphi中,建立的一个窗体,就相当于是声明了一个类,在这个窗体的源文件上写的无论是变量,函数,还是过程,都是所建立的窗体的类的成员.但是我想不通delphi中的什么才相当于是c++中的对象,或者delphi就根本不支持面向对象(只是面向控件).另外再请大家推荐一本比较好的delphi的书!!!!!!!!!!!
      

  5.   

    我刚才为了验证大家教给我的东西,我建立了一个工程,但是出了些问题请大家分析分析(在这个工程中建立了两个窗体form1,form2)
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        a:integer;
      end;var
      Form1: TForm1;
    implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
    a:=50000;
    form2.show;
    end;end.
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, WinSkinData, StdCtrls;type
      TForm2 = class(TForm)
        SkinData1: TSkinData;
        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:=inttostr(form1.a);
    end;end.我运行起来后发现为什么在form2窗体中的edit1中的数字始终显示的是0 呢,请大家帮我分析分析(我估计我自己又是犯了什么概念性的错误)
      

  6.   

    edit1.Text:=inttostr(form1.a);这句不能写在FORM2的CREATE事件中,因为FORM1和FORM2是同时创建的,而这时你还没对A赋值,所以就是0。你可以放在FORM2 DBCLICK事件中
      

  7.   

    我把它改成了:procedure TForm2.FormClick(Sender: TObject);
    begin
    edit1.Text:=inttostr(form1.a);
    end;但是这回是什么都不显示,edit1.text是空的,大家帮忙分析一下是怎么回事???