怎么把form1的一个变量传到form2去啊?我试了在form1里面声明了一个public integer变量,然后在form2调用。。但是调用的值一直都是0

解决方案 »

  1.   

    //Form1的代码--------------------------------------------
    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 }
        val: integer;
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      val:=100;
      form2.Show;
    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);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementationuses Unit1;{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
    begin
      showmessage(inttostr(form1.val));
    end;end.
      

  2.   

    当然赋过了。。我在form1调用都是正常的。。
    是不是我声明那个变量的地方放错了啊??
    这是代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, DB, ADODB, jpeg;type
      TForm_Logo = class(TForm)
        Label3: TLabel;
        LOGO_backimage: TImage;
        Edit1: TEdit;
        RaB_stu: TRadioButton;
        RaB_academy: TRadioButton;
        Edit2: TEdit;
        RaB_manage: TRadioButton;
        Label2: TLabel;
        Label1: TLabel;
        Button1: TButton;
        ADOConnection1: TADOConnection;
        ADOStoredProc1: TADOStoredProc;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
        Cauthority : integer;//就是这个变量
      end;
    地方放错没有??
      

  3.   

    我找到问题了。。原来delphi会先把所有的form先初始化一遍,而我是在form2初始化的时候调用的,form1中的变量还没来得及赋值。
    但是又有了个新问题。。我是想用那个变量去动态生成一个treeview,而我没找到treeview的初始化函数,所以才在form2建立的时候初始化treeview的。。可以告诉我treeview怎么在form建立的时候初始化吗??
      

  4.   

    而我没找到treeview的初始化函数
    ///////////不是你的错,因为根本就没有什么初始化函数
    只有动态创建.
    在form2建立的时候初始化Treeview?
    ///////////放在form2的oncreate或者是onshow都可以的。
      

  5.   

    但是我需要那个变量去初始化treeview啊。。怎么解决呢?
      

  6.   

    delphi的对象实例化的时候一般都回有一个初始值的,比方integer类型的数据就是0,这没什么好奇怪的。你如果想要实现,新窗口从form1中的一个参数哪里获得值的话,可以在新窗口中uses form1的那个文件,然后在窗口onCreate或者OnShow的时候读出来那个数,然后给你的Cauthority : integer赋值就可以了。
    关于动态构造TreeView的问题,基本上调用几个TreeNode的add或者addchild方法基本上就能够搞定。
      

  7.   

    我就是放在form2的oncreate的啊。。可是那个变量在form2初始化的时候还没赋值呢
    delphi会先把所有的form先初始化一遍
      

  8.   

    1、确认已经uses进去了form1(参数来源,这里暂称之为form1)。
    2、在form2(新建的窗口,赞成为form2)OnCreate事件当中从form1读取数值,给form2的Cauthority赋值。
    3、在form2的OnCreate或者OnShow事件当中动态的构造TreeView,当然如果写在OnCreate里面的话,要注意赋值和动态构造的先后顺序。
      

  9.   

    你可以让form2主动去读数据的
    看现在你是让form1给form2去赋值,这样的话就不行了,为什么不让form2去主动的读取那???
      

  10.   

    问题已经解决,在form2.show里面调用那个数据就可以了
    to:heluqing(鉴之小河〖挣大钱娶美女〗) 
    非常谢谢,不过你还是没看动我的意思。。我意思是,那个变量是在form1。buttonclick事件里面赋值的,而delphi会在运行的时候把所有的form都先初始化了,也就是先调用了create,而这个时候那个变量还没赋值,所以在form2.create里面调用这个变量的值是0高兴啊。。困绕了我一晚上,主要是没想到delphi会在运行的时候把所有的form都先初始化
    该去睡觉了  :p