打开A子窗体,再打开b子窗体的时候A子窗体关闭,并且如果A子窗体没有保存提示要保存,应该如何实现?

解决方案 »

  1.   

    写个createForm窗口函数就可以实现你的功能
    1。在子窗口关闭事件中,看是否已经保存,如果没有保存则提示保存
    2。在该函数中检测是否有其它窗体,如果有则关闭
    3。创建新窗体
      

  2.   


    //Unit1
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button2Click(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationuses Unit2, Unit3;{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
    begin
      if Assigned(FormA) then
        FormA.Close;
      if Assigned(FormA) then
         Exit;
      if not Assigned(FormB) then
         FormB:=TFormB.Create(Application);
      FormB.ShowModal;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if not Assigned(FormA) then
         FormA:=TFormA.Create(Application);
      FormA.Show;
    end;end.
    //Unit2=FormA
    unit Unit2;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TFormA = class(TForm)
        Label1: TLabel;
        Button1: TButton;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private  public
        IsSaved:Boolean;
      end;var
      FormA: TFormA;implementation{$R *.dfm}procedure TFormA.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      if not IsSaved then
      begin
        Action:=caNone;
        Application.MessageBox('未保存,请保存','提示',64);
      end
      else
      begin
        Action:=caFree;
        FormA:=nil;
      end;
    end;procedure TFormA.Button1Click(Sender: TObject);
    begin
      IsSaved:=True;
    end;procedure TFormA.FormCreate(Sender: TObject);
    begin
      IsSaved:=False;
    end;end.
    //Unit3=FormB
    unit Unit3;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TFormB = class(TForm)
        Label1: TLabel;
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FormB: TFormB;implementation{$R *.dfm}procedure TFormB.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
      FormB:=nil;
    end;end.
      

  3.   

    有没有保存在窗体关闭询问事件里处理:
    procedure Tfpdcl.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    begin
      if "保存标志未保存"  then
      begin
        showmessage('未保存,请保存');
        canclose:=false;
      end;
    end;保证只打开一个窗体可以先执行关闭所有窗体过程,再打开某个窗体
    procedure Tmain.N7Click(Sender: TObject);
    var
      i:integer;
    begin
      for i:=0 to main.MDIChildCount-1 do
        try
          main.MDIChildren[i].Close;
        except
          on EAccessviolation do ;
        end;
    end;
      

  4.   

    你再打开B窗体时,判断一下是否有子窗体打开,即      for I := Form1.MDIChildCount-1 downto 0 do
          Form1.MDIChildren[I].Close;接着在打开B子窗体。
    这样子应该可以,如果害怕有没有保存,我觉得你应该用一个全局变量来确认是否有做改动啦,最后再在关闭事件中判断。