主窗体unit主窗体对象,通过主窗体打开一个子窗体.子窗体在implement里循环引用了主窗体unit,
子窗体做完事情后关闭, 想调用主窗体的close方法,让他关闭,可是没反应,主窗体关不掉,怎么办呀?
但调用他的其他方法就可以了,为什么呀?

解决方案 »

  1.   

    unit OrderNewBookUnit;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, TntStdCtrls, Grids,
      TntGrids, YxAdvSGrid,UpdateOrderUnit;
    type
      TOrderNewBookForm = class(TForm)
    ///////////////////////
    procedure TOrderNewBookForm.updateTntButtonClick(Sender: TObject);
    var
      updateOrderForm:TupdateOrderForm;
    begin
        updateOrderForm:=TupdateOrderForm.Create(self);
        updateOrderForm.YxAdvSGrid1:=YxAdvSGrid1;
        updateOrderForm.FormStyle := fsMDIChild;
        updateOrderForm.Show;
    end;
    ///子窗体的代码:
    unit UpdateOrderUnit;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, TntStdCtrls, ExtCtrls, TntExtCtrls,
      YxAdvSGrid,unitDataType,UnitPublic,UnitConst
    type
      TupdateOrderForm = class(TForm)
    var
      updateOrderForm: TupdateOrderForm;
      issuingDataTab:TissuingDataTab;
    implementation
    uses
      OrderNewBookUnit;
    procedure TupdateOrderForm.refresh(issuingDataTab: TissuingDataTab);
    var
      row:Integer;
    begin
          OrderNewBookForm.Close;//就是这里执行了不起作用,
    end;
      

  2.   

    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Menus,Unit2;
    type
      TForm1 = class(TForm)
        MainMenu1: TMainMenu;
        N6661: TMenuItem;
        N7771: TMenuItem;
        procedure N7771Click(Sender: TObject);
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    procedure TForm1.N7771Click(Sender: TObject);
    var
      Form2: TForm2;
    begin
      Form2:= TForm2.Create(self);
      form2.Show;
    end;
    end.
    //////////////////
    unit Unit2;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,Unit3;
    type
      TForm2 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      end;
    var
      Form2: TForm2;
    implementation
    uses
      Unit1;
    {$R *.dfm}
    procedure TForm2.Button1Click(Sender: TObject);
    var
      Form3: TForm3;
    begin
      Form3:= TForm3.Create(self);
      form3.Show;
    end;
    procedure TForm2.Button2Click(Sender: TObject);
    begin
      Form1.Close;
    end;
    end.
    ////////////////////////
    unit Unit3;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
    type
      TForm3 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      end;
    var
      Form3: TForm3;
    implementation
    uses
      Unit2;
    {$R *.dfm}
    procedure TForm3.Button1Click(Sender: TObject);
    begin
      form2.Close;
    end;
    end.
    疑问,form2的按钮能关form1窗口,但form3为什么关不了form2的窗口(这才是我想要的,怎么回事呀?)
      

  3.   

    你那个Form2是局部变量,TForm3里的Form2是全局变量。

    var 
      Form2: TForm2;
    这两行去掉 
      

  4.   

    你先看看你的项目文件project
    Form2,Form3都已经创建了,
    // 这时 创建的Form2不是 单元unit2中Form2,你在Unit3中调用Form2.Close所以无效
    procedure TForm1.N7771Click(Sender: TObject);
    var
      Form2: TForm2;
    begin
      Form2:= TForm2.Create(self);
      form2.Show;
    end;
    end. 
    你可以这样修改就ok了
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.btn1Click(Sender: TObject);
    //var
    //  Form2: TForm2;
    begin
    //  Form2:= TForm2.Create(self);
      form2.Show;
    end;end.
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm2 = class(TForm)
        btn1: TButton;
        btn2: TButton;
        procedure btn1Click(Sender: TObject);
        procedure btn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form2: TForm2;implementationuses Unit3, Unit1;{$R *.dfm}procedure TForm2.btn1Click(Sender: TObject);
    //var
    //  Form3: TForm3;
    begin
    // Form3:= TForm3.Create(self);
      form3.Show;
    end;procedure TForm2.btn2Click(Sender: TObject);
    begin
      Form1.Close;
    end;
    end.unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm3 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form3: TForm3;implementationuses Unit2;{$R *.dfm}procedure TForm3.btn1Click(Sender: TObject);
    begin
      Form2.Close;
    end;end.