I think .ReadOnly is better; for one, users can still copy (to paste somewhere else). And, as you mention, scroll to see text which is out of sight.
Personally, I do most validation when the record is saved, not in LostFocus() or Valid(). However, sometimes I do change other controls in LostFocus(), based on some condition.
If this is a problem for you, you would have to check whether the control is .ReadOnly; depending on how much validation you do in LostFocus() or Valid(), you may want to do this for individual controls, or in your base classes.
Colors vary between .ReadOnly = .T. and .Enabled = .F.; you might at least consider adjusting this, too. Although personally, I find the default colors for .ReadOnly = .T. acceptable; and a change not worth the trouble.
>In my VFP application framework I currently use this.readonly=.T. for textboxes, editboxes and grids that I don't want edited. I have favored this over this.enabled=.F. because I still want the users to enter the control and scroll to see data that may not be in the visible area of the control. However, this means additional code must be added to ensure Valid() and LostFocus() code does not run. On the other hand, setting the enabled property is consistent with all those other controls that do not have a readonly property.
>
>What do other users use to disable their foundation classes? Apart from what I have mentioned above, are there any other pros and cons of each approach?
>
>Many thanks,
>Alan Harris-Reid
Difference in opinions hath cost many millions of lives: for instance, whether flesh be bread, or bread be flesh; whether whistling be a vice or a virtue; whether it be better to kiss a post, or throw it into the fire... (from Gulliver's Travels)