Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Validating several textboxes on a C# windows form at the same time

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

like image 379
Edwin Avatar asked Dec 24 '09 16:12

Edwin


2 Answers

Check the property Form.AutoValidate.

Possible values:

  • Disable

Implicit validation will not occur. Setting this value will not interfere with explicit calls to Validate or ValidateChildren.

  • EnablePreventFocusChange

Implicit validation occurs when the control loses focus.

  • EnableAllowFocusChange

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.

like image 89
João Angelo Avatar answered Sep 24 '22 02:09

João Angelo


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

like image 31
jvilalta Avatar answered Sep 23 '22 02:09

jvilalta