OnClose、OnCloseQuery、OnDestroyの違い


なんでだろ〜  2007-12-15 07:54:39  No: 28960

FormのイベントにあるOnClose、OnCloseQuery、OnDestroyの違いについて詳しい方、ご教示願います。


igy  2007-12-15 09:30:12  No: 28961

ヘルプは見られました?


Fusa  2007-12-15 11:05:49  No: 28962

こちらでは、こんな風に話題になったことがあるようですよ。

http://www2.big.or.jp/~osamu/Delphi/browse.cgi?index=48092

私は
生成と破棄をFormCreateとFormDestroy
起動と終了をFormCreateとFormCloseQueryで
と、対になるような感じで記述しますね。

FormCreateの前半に生成コードを書き
後半でIniファイル読み出しとか各種初期設定などをしています。


HOta  2007-12-15 19:18:18  No: 28963

OnClose、OnCloseQuery、OnDestroy
OnCloseはフォームを閉じるとき。
OnCloseQueryはフォームを閉じようとしたとき。
OnDestroyはフォームを破棄するとき。


KHE00221  2007-12-16 21:23:31  No: 28964

メインフォームの場合 Close するとそのまま終了(解放)するので
OnClose と OnDestroy の違いがあまり分からないかもしれませんが 

以下のようなプログラムで確認してみると理解できるかもしれません。

//---------------------------------------------------------------

unit Unit4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm4 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Memo1: TMemo;
    Button5: TButton;
    Button6: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form4: TForm4;

implementation

uses Unit5;

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
    Form5 := TForm5.Create(Self);
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
    Form5.Show;
end;

procedure TForm4.Button3Click(Sender: TObject);
begin
    Form5.Close;
end;

procedure TForm4.Button4Click(Sender: TObject);
begin
    Form5.Free;
end;

procedure TForm4.Button5Click(Sender: TObject);
begin
    Form5.Hide;
end;

procedure TForm4.Button6Click(Sender: TObject);
begin
    Form5.Release;
end;

end.

//----------------------------------------------------------------

unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm5 = class(TForm)
    Button1: TButton;
    RadioButton1: TRadioButton;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormDestroy(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure Button1Click(Sender: TObject);
  private
    { Private 宣言 }
  public
    { Public 宣言 }
  end;

var
  Form5: TForm5;

implementation

uses Unit4;

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);
begin

end;

procedure TForm5.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    Form4.Memo1.Lines.Add('Close');
end;

procedure TForm5.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
    Form4.Memo1.Lines.Add ('CloseQuery');
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
    Form4.Memo1.Lines.Add ('Create');
end;

procedure TForm5.FormDestroy(Sender: TObject);
begin
    Form4.Memo1.Lines.Add ('Destroy');
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加