procedure TForm1.Button1clieck(Sender:TObject);
var
 f:TForm2;
begin
 f:=Tform2.Create(Application);
 f.showmodal;
 FreeAndNil(f)
end;procedure TForm2.Button1clieck(Sender:TObject);
var
 f:TForm3;
begin
 f:=Tform3.Create(Application);
 f.showmodal;
 FreeAndNil(f)
end;如何在模态窗口Form3上,Button1的按钮事件中,关闭自身的同时关闭模态父窗口Form2? 我用下面的语句,怎么老是报错:
begin
 Form2.Close;
 Self.Close;
end;

解决方案 »

  1.   

    你要退出程序运行?
    application.terminate;
      

  2.   

    不是,我只是要关闭Form3同时,关闭他下面的窗口Form2.并不是要退出程序。
      

  3.   

    就是说,在模态窗口Form3的按钮事件中,关闭自身的同时 关闭模态窗口form2.
      

  4.   

    将form2的实例传递给form3,然后就可以在form3中调用form2.close,试试
      

  5.   

    procedure TForm2.Button1clieck(Sender:TObject);
    var
     f:TForm3;
    begin
     f:=Tform3.Create(Application);
     f.showmodal;
     FreeAndNil(f);
     close;//这样form2也关闭了
    end;
      

  6.   

    可是我有时需要关Form2,有时不需要关Form2,这样做,好像无论什么时间,Form3一关闭,Form2就关闭了啊。能否在Form3中控制form2的关闭呢?
      

  7.   

    close時加判斷處理:當前的form是哪一個,再進行close;
      

  8.   

    比如点击form3上的按钮1,关闭form3的同时关闭form2.点击form3上的按钮2,只关闭form3.这样如何在上面的close语句判断,又不出错呢。
      

  9.   

    form2不用动态创建的就可以直接用form2变量关闭了
      

  10.   

    我实现了,给分吧。窗口1弹出窗口2,按钮代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      frm: TForm2;
    begin
      frm := TForm2.Create(self);
      frm.ShowModal;
      frm.Free;
    end;
    窗口2弹出窗口3,按钮代码:
    procedure TForm2.Button1Click(Sender: TObject);
    var
      frm: TForm3;
    begin
      frm := TForm3.Create(self);
      if frm.ShowModal = mrcancel  then
        close;
      frm.Free;
    end;
    窗口3两个按钮,按钮1的ModalResult属性设为mrOK,按钮2的ModalResult属性设为mrCancel
      

  11.   

    你的 Form2.Close;中的Form2 和var
     f:TForm2;
    begin
     f:=Tform2.Create(Application);这里创建的是f变量
    Form2 根本就没有创建。Form2.Close;的时候肯定出错了。
      

  12.   

    同意,根本就不是同一变量!
    应该是f.Close,而不是Form2.Close;
      

  13.   

    另外你把TForm2和TForm3的对象定义为函数级私有变量,在函数外部根本没有办法引用的。除非你将变量对其它同类变量值进行赋值操作了。