同时validationC#窗体上的多个文本框

我有一个包含多个文本框和其他控件的表单。 我正在使用errorprovider控件,我在每个需要validation的文本框上连接了validation事件。 当控件将焦点转移到另一个控件时,会发生Validating事件。 因此,当您使用Tab键移动当前控件或使用鼠标1单击另一个控件时,会发生该事件。 我发现这非常烦人,只是举个例子,如果我打开这个winform,然后立即尝试关闭它,它不会让我,因为validation会触发抱怨第一个文本框没有输入文本。

我想要的行为是使用errorprovider,如何在单击表单的“保存”按钮时validation整个表单?

谢谢

检查属性Form.AutoValidate 。

可能的值:

  • 禁用

不会发生隐式validation。 设置此值不会干扰对Validate或ValidateChildren的显式调用。

  • EnablePreventFocusChange

当控件失去焦点时,会发生隐式validation。

  • EnableAllowFocusChange

发生隐式validation,但如果validation失败,焦点仍将更改为新控件。 如果validation失败,则不会触发Validated事件。

将其设置为EnableAllowFocusChange将解决打开表单的问题,并立即尝试关闭它,因为焦点将被转移到“取消”按钮。

如果要完全控制validation,可以将其设置为“ Disable并使用Form.ValidateForm.ValidateChildren执行手动validation。 我不是百分百肯定,但我相信Form.ValidateChildren不会触发TabControl放置的TabControlvalidation事件。

将所有控件(Save按钮除外)上的CausesValidation属性设置为False。 这将禁止除按钮之外的所有控件的Validating事件。 它可能不是你想要的确切行为,因为当你改变对按钮的关注时会发生恼人的行为,但它接近你想要的想法。

如果不起作用,另一个选项是在单击按钮时循环控制并一次手动validation它们……

这是MSDN链接: http : //msdn.microsoft.com/en-us/library/system.windows.forms.control.causesvalidation.aspx

只是为了保持更新,JoãoAngelo说Form.ValidateChildren()不会触发内部控件的validation,比如说GroupBox或TabControl。

但是,您可以将ValidationContraints传递给重载的ValidateChildren(ValidationConstraints)方法并将其设置为None,其中:

“validation所有子控件以及这些子控件的所有子控件,无论其属性设置如何。”

没有任何方法可以让WinForms在保存时validation控件。 与Web表单不同,没有任何“提交”或“保存”事件(至少不在表单上)。 您可以将表单编程为以这种方式运行,但您将无法使用数据绑定(Save将设置模型并检查错误)。

也许更好的方法是不使用对话框来显示错误(我假设你是因为你说这是关闭表单的问题)。 工具提示可以提供更好的用户体验。 如果用户忽略工具提示,则可以在单击“保存”时提供对话框。 即使数据不好,他们也可以关闭表单。