Hi stumbler,
OnBeforeChange occurs when the change has been made but not yet accepted or finalized. Code in this event procedure can examine the new data value and, if it doesn't meet the form's requirements, reject it and keep the old data value.
OnValidate occurs after OnBeforeChange, when the change has still not been finalized. It is like OnBeforeChange in that code examines the data value to see if it is acceptable. It differs from OnBeforeChange in that it does not offer the ability to automatically roll back the data to the previous value. Rather, it lets you display a validation error message to users to prompt them to fix the data.
OnAfterChange occurs when the change has been accepted and finalized. It is typically used to perform calculations or other updates to the form based on the new data. Strictly speaking, this event really isn't used for data validation but rather to initiate some action after the data has been accepted.
Hope this will help you
B.Shiva Prasad
InfoPath Dev,
http://www.ggktech.com
India