In my company, I've seen several approaches for notifying a user when their input is invalid (our validation is generally done when the user clicks some form of a "Submit" button).
Here are the most common approaches I've seen:
Using the ErrorProvider class to communicate which controls contain invalid input. (this is my current preference because the validation can be done in one shot and the user can easily identify which controls contain the invalid input.)
Validating the input in all of the controls and compiling a list of messages to display to the user. Once the validation routine has completed, display all "invalid input" messages to the user at once (via a MessageBox).
Validating the input in each control sequentially and notifying the user once a piece of invalid data is found (via a MessageBox). (*I'm not a fan of this approach because if Control_A and Control_B both contain invalid data, the user will have to attempt to submit the data twice in order to see both validation messages.*)
What do you think is the best way to go about effectively/efficiently notifying users of invalid input?