Calculates fields based on the control or cell (in an edit table) losing focus.


bforward = CALCULATE (ctrlentID, ctrlclassID, ctrlcolumn)


CALCULATE accepts arguments for the following parameters.

ctrlentIDHas the format WindowName.ControlName, where WindowName is the identifier of the window that contains the affected control, and ControlName is the identifier of the control. Notice that a period separates the two values.
ctrlclassIDThe type of control that recognizes the event. This event is applicable only to a control bound to a symbolic from the primary table.
ctrlcolumnThe column number.


True or false. If false, the program execution returns to the calling procedure. If true, the event processing goes to the next level.

See also

Dict_DependCalculate()Braces Operator {}

Recalculating All Controls

/* code to recalculate all controls on a form, using the CTRLMAP property.
After all controls are known, loop through and send the CALCULATE event
to all the controls. */
declare subroutine send_event
window_controls = @@window->ctrlmap
window_controls_count = count(window_controls, @fm) + (window_controls # '')
for i = 1 to window_controls_count
   send_event(window_controls<i>, "CALCULATE")
next i

Recalculating a Data Bound Control Based on a Change in an Edit Table

Note: To enable a data bound control based on a symbolic field to recalculate if a value in an edit table changes, update the DEFPROP property (not the ARRAY property) of the edit table. Then send a CALCULATE event to the data bound control, as follows:

Stat = Send_Event( DataBoundControlName, "CALCULATE" )


Occurs after a LOSTFOCUS event or POSCHANGED event (for an edit table). The CALCULATE event occurs when there is a relationship between two controls (or columns, in an edit table) based on a primary table. The CALCULATE event will only occur if there is a control that is based on a calculated field which is dependent on the control that is losing focus.

  • No labels