If you want to give the user the option of  confirming whether a form should be closed, use the CloseFormQuery method and the CloseQuery event.

Our example has two forms: the main form and a dialog which is displayed when the form is about to be closed. The main form has two buttons, OK and Cancel.



The Cancel button closes the form using the CloseFormQuery method:

     Invoke #Com_Owner.CloseFormQuery

In addition to the buttons, the form includes the Dialog form.

The Dialog form has three buttons:



All the three buttons have a Click event routine which closes the form:

     EVTROUTINE HANDLING(#BTN_CLOSE.Click)
   Invoke #Com_Owner.CloseForm
ENDROUTINE 
 
EVTROUTINE HANDLING(#BTN_CANCEL.Click)
   Invoke #Com_Owner.CloseForm
ENDROUTINE 
 
EVTROUTINE HANDLING(#BTN_MIN.Click)
   Invoke #Com_Owner.CloseForm
ENDROUTINE

In addition, they have their ModalResult values set as follows:

#BTN_CLOSE

Cancel

#BTN_CANCEL

No

#BTN_MIN

OK

In addition to the Cancel button event routine, the main form has an event routine for the CloseQuery event. This routine invokes the Dialog form and then receives its ModalResult  when the Dialog form is closed. It then tests for the value of the returned ModalResult and performs actions accordingly.

Note that whether the Closing of the form is continued depends on the value of the #Option field which is used for the Continue parameter.

     EvtRoutine Handling(#Com_Owner.CloseQuery) Continue(#Option)
  Invoke #Dialog.ShowModalForm
 
  Define #QResult Reffld(#Std_Texts)
   Change #QResult #Dialog.modalResult
 
   Case #QResult
   When '= No'
      Invoke #Com_Owner.RestoreForm
      Set #Option Value(FALSE)
   When '= OK'
      Invoke #Com_Owner.MinimizeForm
      Set #Option Value(FALSE)
   OtherWise 
      Set #Option Value(TRUE)
   EndCase 
EndRoutine

The case statement restores the main form if the ModalResult value returned from the Dialog form is No (assigned to the Cancel button) and minimizes the main form if the value returned is OK (assigned to the Minimize button). In both cases the Continue parameter is set to False. If any other ModalResult value is returned,  the form is closed.

  • No labels