Try OpenEdge Now
skip to main content
ABL Reference
ABL Syntax Reference : DISABLE statement
 

DISABLE statement

Disables input for one or more field-level and child frame widgets within a frame that were previously enabled with the ENABLE statement. Disabling a widget prevents the user from providing input to the widget, but does not remove it from the display.

Syntax

DISABLE [ UNLESS-HIDDEN ] 
 {     ALL [ EXCEPT field ... ]    
|  { field[ WHEN expression ] }... 
 } 
 { frame-phrase] }
UNLESS-HIDDEN
Restricts DISABLE to fields whose HIDDEN attribute is FALSE.
ALL [ EXCEPT field... ]
Specifies that all field-level widgets for a frame should be disabled, except those that you optionally specify.
field [ WHEN expression ]
A field-level widget to be disabled. If you use the WHEN option, then the field is disabled only if expression is TRUE when the DISABLE statement is executed. The expression must evaluate to a LOGICAL value.
frame-phrase
The frame that contains the widgets to disable. If you omit frame-phrase, the default frame for the current block is assumed.
You cannot use the IN WINDOW option of the frame phrase within a DISABLE statement. For more information on frame-phrase, see the Frame phrase reference entry.

Example

In the following example, the CustNum field and the Quit button are initially active. When you press GO in the CustNum field, that field becomes disabled and the Save and Undo buttons and the CreditLimit field are enabled. If you choose either the Save or Undo button, those buttons and the CreditLimit field are again disabled and the CustNum field is enabled again.
r-enable.p
DEFINE VARIABLE ok AS LOGICAL NO-UNDO.

DEFINE BUTTON b_quit LABEL "Quit" AUTO-ENDKEY.
DEFINE BUTTON b_save LABEL "Save".
DEFINE BUTTON b_undo LABEL "Undo".

DEFINE FRAME butt-frame
  b_save b_undo b_quit
  WITH CENTERED ROW SCREEN-LINES - 1.
  
FORM Customer
  WITH FRAME cust-info SIDE-LABELS CENTERED
  TITLE "Update Customer Credit Limit".

ON CHOOSE OF b_save, b_undo IN FRAME butt-frame DO:
  DISABLE b_save b_undo WITH FRAME butt-frame.
  DISABLE Customer.CreditLimit WITH FRAME cust-info.
  ENABLE Customer.CustNum WITH FRAME cust-info.
  IF SELF:LABEL = "save" THEN
    ASSIGN FRAME cust-info Customer.CreditLimit.
  CLEAR FRAME cust-info NO-PAUSE.
  APPLY "ENTRY" TO Customer.CustNum IN FRAME cust-info.
END.

ON GO OF Customer.CustNum IN FRAME cust-info DO:
  FIND Customer USING Customer.CustNum EXCLUSIVE NO-ERROR.
  IF AVAILABLE Customer THEN DO:
    DISABLE Customer.CustNum WITH FRAME cust-info.
    ENABLE Customer.CreditLimit WITH FRAME cust-info.
    ENABLE ALL WITH FRAME butt-frame.
    DISPLAY Customer WITH FRAME cust-info.
  END.
  ELSE DO:
    MESSAGE "No Customer Record exist for Customer number"
      INPUT Customer.CustNum ", Please re-enter."
      VIEW-AS ALERT-BOX WARNING BUTTONS OK-CANCEL UPDATE OK.
    IF NOT ok THEN
      APPLY "CHOOSE" TO b_quit IN FRAME butt-frame.
  END.
END.

ENABLE Customer.CustNum WITH FRAME cust-info.
ENABLE b_quit WITH FRAME butt-frame.
WAIT-FOR CHOOSE OF b_quit IN FRAME butt-frame
   FOCUS Customer.CustNum IN FRAME cust-info.

Notes

If you invoke the DISABLE statement for the parent frame of a frame family, the field representation widgets and descendant frames owned by the parent frame are all disabled. However, the field representation widgets of the descendant frames remain enabled and appear sensitive, although they cannot accept input. To disable field representation widgets in the descendant frames and make them appear insensitive, you must invoke DISABLE statements for each of the descendant frames.

See also

ENABLE statement, WAIT-FOR statement (ABL only)