thisform.BroadcastMethodCall( "ResetReadOnly" )where your textbox class has an implementation of ResetReadOnly:
this.ReadOnly = this.lSaveReadOnlyOne way to write the iterator method is:
* BroadcastMethodCall() lparameter pcMethod local loObject, llRetVal, lcObjectMethod llRetVal = .T. lcObjectMethod = "loObject." + pcMethod + "()" for each loObject in this.objects * Propogate method call to the contained objects if PEMStatus( loObject, pcMethod, 5 ) * that have this method llRetVal = llRetVal and eval( lcObjectMethod ) endif if ( llRetVal and PEMStatus( loObject, "BroadcastMethodCall", 5 ) ) * recurse into the contained object llRetVal = loObject.BroadcastMethodCall( pcMethod ) endif if ( ! llRetVal ) * stop on the first object that doesn't return .t. exit endif endfor return llRetValAre you sure you want individual controls to have their own readonly state? You could get your form into a mode where some controls are readonly and others are not, and have a hard time getting them in synch again.