A template would be the go for this. You can make them such that it auto populates every form, or you can make one that you add to each form as required.
Templates really are not that hard, but like anything the first step is the hardest.
Have a look at some #Extension templates to get the idea.
Here’s something to get you started
#EXTENSION(ControlPropOnOpen, 'Configure Controls property when opened on diff Actions'),PROCEDURE
#!
#BUTTON('Open &Action for ' & %Control),FROM(%Control, %Control & ' - ' & %SMHInsertAction),INLINE
#PROMPT('&Insert Action:', DROP('None|Hide|Disable|Enable|ReadOnly|Set Properties')),%SMHInsertAction,DEFAULT('None')
#PROMPT('&Update Action:', DROP('None|Hide|Disable|Enable|ReadOnly|Set Properties')),%SMHUpdateAction,DEFAULT('None')
#PROMPT('&Delete Action:', DROP('None|Hide|Disable|Enable|ReadOnly|Set Properties')),%SMHDeleteAction,DEFAULT('None')
#BOXED('Open Action Insert Property Settings'),WHERE(%SMHInsertAction = 'Set Properties')
#BUTTON('Property Assignments'),MULTI(%SMHInsPropertyAssignments, '{ ' & %CtrlProperty & ' } = ' & %CtrlValue),INLINE,AT(,,,50)
#PROMPT('&Property:', @s80),%InsCtrlProperty,REQ
#PROMPT('New &Value:', @S255),%InsCtrlValue,REQ
#ENDBUTTON
#ENDBOXED
#BOXED('Open Action Update Property Settings'),WHERE(%SMHUpdateAction = 'Set Properties')
#BUTTON('Property Assignments'),MULTI(%SMHUpdPropertyAssignments, '{ ' & %CtrlProperty & ' } = ' & %CtrlValue),INLINE,AT(,,,50)
#PROMPT('&Property:', @s80),%UpdCtrlProperty,REQ
#PROMPT('New &Value:', @S255),%UpdCtrlValue,REQ
#ENDBUTTON
#ENDBOXED
#BOXED('Open Action Delete Property Settings'),WHERE(%SMHUpdateAction = 'Set Properties')
#BUTTON('Property Assignments'),MULTI(%SMHDelPropertyAssignments, '{ ' & %CtrlProperty & ' } = ' & %CtrlValue),INLINE,AT(,,,50)
#PROMPT('&Property:', @s80),%DelCtrlProperty,REQ
#PROMPT('New &Value:', @S255),%DelCtrlValue,REQ
#ENDBUTTON
#ENDBOXED
#ENDBUTTON
#!
#!
#AT(%WindowManagerMethodCodeSection, 'Init', '(),BYTE'),PRIORITY(8100),DESCRIPTION('Configure Controls for Open by action')
#SUSPEND
#?CASE SELF.Request #<! Configure controls for open action
#? OF InsertRecord
#FOR(%Control)
#CASE(%SMHInsertAction)
#OF('Disable')
DISABLE(%Control)
#OF('Enable')
ENABLE(%Control)
#OF('Hide')
HIDE(%Control)
#OF('ReadOnly')
%Control{PROP:ReadOnly} = True
#OF('Set Properties')
#FOR(%SMHInsPropertyAssignments)
%Control{%InsCtrlProperty} = %InsCtrlValue
#ENDFOR
#ENDCASE
#ENDFOR
#? OF ChangeRecord
#FOR(%Control)
#CASE(%SMHUpdateAction)
#OF('Disable')
DISABLE(%Control)
#OF('Enable')
ENABLE(%Control)
#OF('Hide')
HIDE(%Control)
#OF('ReadOnly')
%Control{PROP:ReadOnly} = True
#OF('Set Properties')
#FOR(%SMHUpdPropertyAssignments)
%Control{%UpdCtrlProperty} = %UpdCtrlValue
#ENDFOR
#ENDCASE
#ENDFOR
#? OF DeleteRecord
#FOR(%Control)
#CASE(%SMHDeleteAction)
#OF('Disable')
DISABLE(%Control)
#OF('Enable')
ENABLE(%Control)
#OF('Hide')
HIDE(%Control)
#OF('ReadOnly')
%Control{PROP:ReadOnly} = True
#OF('Set Properties')
#FOR(%SMHDelPropertyAssignments)
%Control{%DelCtrlProperty} = %DelCtrlValue
#ENDFOR
#ENDCASE
#ENDFOR
#?END
#RESUME
#ENDAT
#!
#!
#GROUP(%GetDefaultOpenAction, %Ctrl),PRESERVE
#FIX(%Control, %Ctrl)
#! #CASE(%ControlType)
#RETURN('None')
#!
#!