I have a form with several textboxes and other controls. I'm using the errorprovider control and I wired the validating event on each textbox that I need to validate. The Validating event occurs when a control yields focus to another control. So the event occurs when you use the tab key to move away from the current control or when you click another control with the mouse1. And I find that extremely annoying, just to give an example, if I open this winform, and then immediately try to close it, it is not going to let me, because the validation will trigger complaining that the first textbox have no text entered.
The behavior I want is using the errorprovider, how can I validate the whole form only when I click the Save button of the form?
Thanks
Check the property Form.AutoValidate.
Possible values:
Implicit validation will not occur. Setting this value will not interfere with explicit calls to Validate or ValidateChildren.
Implicit validation occurs when the control loses focus.
Implicit validation occurs, but if validation fails, focus will still change to the new control. If validation fails, the Validated event will not fire.
Setting it to EnableAllowFocusChange
will resolve the problem of opening the form and immediatly trying to close it since the focus will be transferred to the Cancel button.
If you want complete control over the validation you can set it to Disable
and perform manual validation using Form.Validate
and Form.ValidateChildren
. I am not 100% sure but I believe that Form.ValidateChildren
will not trigger validation events for controls placed inside a TabControl
.
Set the CausesValidation property on all the controls (except the Save button) to False. This will suppress the Validating event for all controls except the button. It might not be the exact behvior you want, as the annoying behavior will happen when you change focus on the button, but it's close to what you want I think.
Another option, if that doesn't work, is to loop through the controls when the button is clicked and validate them manually one at a time...
Here's the MSDN link: http://msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With