RAD Studio VCL Reference
ContentsIndex
PreviousUpNext
TForm.OnClose Event

Occurs when the form closes.

Pascal
property OnClose: TCloseEvent;
C++
__property TCloseEvent OnClose;

Use OnClose to perform special processing when the form closes. The OnClose event specifies which event handler to call when a form is about to close. The handler specified by OnClose might, for example, test to make sure all fields in a data-entry form have valid contents before allowing the form to close. 

A form is closed by the Close method or when the user chooses Close from the form's system menu. 

The TCloseEvent type points to a method that handles the closing of a form. The value of the Action parameter determines if the form actually closes. These are the possible values of Action:

Value 
Meaning 
caNone  
The form is not allowed to close, so nothing happens.  
caHide  
The form is not closed, but just hidden. Your application can still access a hidden form.  
caFree  
The form is closed and all allocated memory for the form is freed.  
caMinimize  
The form is minimized, rather than closed. This is the default action for MDI child forms.  

If a form is an MDI child form, and its BorderIcons property is biMinimize, then the default Action is caMinimize. If a MDI child form does not have these settings, the default Action is caNone, meaning that nothing happens when the user attempts to close the form. 

If a form is an SDI child form, Action defaults to caHide. 

To close the form and free it in an OnClose event, set Action to caFree.

Note: When the application shuts down, the main form receives an OnClose event, but any child forms do not receive the OnClose event.
 

C++ Examples: 

 

/*
This example displays a message dialog box when the user
attempts to close the form. If the user clicks the Yes
button, the form closes; otherwise, the form only minimizes.
TCustomForm.Close does not allow an action of caMinimize
for a form closing itself.  Close Form2 from Form1 (from
a button?) and implement the OnClose in Form2.  Place
"Application.CreateForm(TForm2, Form2);" in the project dpr
file to open Form2 and set the Form2 Visible property to
True.
*/
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  if (MessageDlg("Close application ?", mtConfirmation, TMsgDlgButtons() << mbYes << mbNo,0) == mrYes)
    Action = caFree;
  else
    Action = caMinimize;
}

 

Copyright(C) 2008 CodeGear(TM). All Rights Reserved.
What do you think about this topic? Send feedback!