比如FORM1有button1,点击button1就可以form2.showmodal,在FORM2中有button1,点击实现FORM3.showmodal.而form3上有BUtton1,点击则form2.button1.enabled:=false;但是程序报错?指点?

解决方案 »

  1.   

    showmodal時后面的窗體停止運行
    showmodal的窗口關閉時﹐向后台的窗體發wm_activeapp消息﹐
    通知其運行
    Show窗体时,后台程序继续运行!
      

  2.   

    在unit1中 uses unit2;
    在unit2中 uses unit3;
    在unit3中 uses unit2;
    把上面的引用语句都放在implementation下面,肯定是可以的。
      

  3.   

    同意 sysu(死树);
    应该是其它的地方出错!
      

  4.   

    to sysu:报的是地址性错误。
    to ESU:RURr如果可以解决,请写具体步骤,OK?THANKS.
    TO 大力:确定已经添加单元文件。不可能可以。
      

  5.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var Dlg:tform2;
    begin
      try
        Dlg:=nil;
        Dlg:=Tform2.Create(Application);
        Dlg.ShowModal;
      finally
        Dlg.Free;
      end;
    end;end.-------------------
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm2 = class(TForm)
        Button1: TButton;
        Edit1: TEdit;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementationuses Unit1,Unit3;{$R *.DFM}procedure TForm2.Button1Click(Sender: TObject);
    var Dlg:tform3;
    begin
      try
        Dlg:=nil;
        Dlg:=Tform3.Create(Application);
        Dlg.ShowModal;
      finally
        Dlg.Free;
      end;
    end;end.
    --------------------
    unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm3 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form3: TForm3;implementationuses Unit2;{$R *.DFM}procedure TForm3.Button1Click(Sender: TObject);
    begin
      form2.edit1.text:='ddd';
    end;end.
      

  6.   

    你的Form2根本没有创建啊,当然就错了,
    创建的只是在Unit1中的dlg.
      

  7.   

    把Unit1中的改为下面的就行了:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      form2:=Tform2.Create(Application);  // 这样才是创建了form2实例,原来只是声明而已
      form2.ShowModal;
    end;
      

  8.   

    哦!
    你要把Unit2和Unit3单元中的
    //var
    //  Form2: TForm2;//var
    //  Form3: TForm3;
    语句都屏蔽掉。
      

  9.   

    form2全部变量未定义,因为使用dlg局部变量显示form2的,把form2显示那段的dlg全部改为form2即可
      

  10.   

    To sysu:能不能不改变FORM1中的代码?而也实现FORM2的创建?
      只能修改FORM2,FORM3中代码,再想一下,THANKS.
      

  11.   

    可以的,在Unit2中创建时,Dlg:=Tform3.Create(Self);
    在Unit3中用 TForm2(Self.Owner).Edit1.Text := 'ddd';
      

  12.   

    to  fancier(OP&&(C/C++)):你的方法不行。
      

  13.   

    同意,你所调用的form2根本没创建,你创建的是在Unit1中的dlg建议
    procedure TForm1.Button1Click(Sender: TObject);
    var Dlg:tform2;
    begin
      try
        Dlg:=nil;
        Dlg:=Tform2.Create(self);
        Dlg.ShowModal;
      finally
        Dlg.Free;
      end;
    end
    ---------------------------------------------------
    procedure TForm2.Button1Click(Sender: TObject);
    var Dlg:tform3;
    begin
      try
        Dlg:=nil;
        Dlg:=Tform3.Create(self);
        Dlg.ShowModal;
      finally
        Dlg.Free;
      end;
    end;
    ----------------------------------------
    procedure TForm3.Button1Click(Sender: TObject);
    begin
      (self.owner as TForm2).edit1.text:='ddd';
    end;
      

  14.   

    showmodal 是模态窗口我在编是也出现过问题,我是用form1.visible来解决问题的,你可以试一试
      

  15.   

    to sysu:你的方法非常好,在此再次接着表示感谢!90分送上!10分是给其他人的,说了要
            进来都有分的,绝不食言,希望不要介意。