The revert button has it's Cancel property set to .T., right? Then you can also do:
if lastkey()=27
return .t.
endif
if !empty(this.value)
return .f.
endif
Now you can revert.
I think about the part, that the revert will tab to the next field... if you have a revert/cancel button, the focus will be at the button afterwards, wouldn't it? You may try out return 0 instead of return .t.
I also agree with Hilmar, that validation is best done at the moment a user want's to save - for the whole record, not single fields.
Bye, Olaf.