Winforms WinForm验证:如何判断表单是否包含未通过验证的控件?

Winforms WinForm验证:如何判断表单是否包含未通过验证的控件?,winforms,validation,Winforms,Validation,我有一个复合usercontrol,其中包含一个下拉“Country”控件和一个复选框。如果选中该复选框,我想显示一个带有工具提示msg的验证图标,提示用户需要选择国家/地区 如果用户试图保存更改,我希望检查整个表单(包括此复合usercontrol)是否存在错误,如果发现错误,则取消保存 我希望,在表单中,我能够调用Me.Validate函数,并且该函数将递归地检查表单上任何级别的控件,并返回一个指示是否存在错误的值。相反,该函数似乎为所有控件触发验证事件(我想这是可以的),并无条件返回TRU

我有一个复合usercontrol,其中包含一个下拉“Country”控件和一个复选框。如果选中该复选框,我想显示一个带有工具提示msg的验证图标,提示用户需要选择国家/地区

如果用户试图保存更改,我希望检查整个表单(包括此复合usercontrol)是否存在错误,如果发现错误,则取消保存

我希望,在表单中,我能够调用Me.Validate函数,并且该函数将递归地检查表单上任何级别的控件,并返回一个指示是否存在错误的值。相反,该函数似乎为所有控件触发验证事件(我想这是可以的),并无条件返回TRUE。 在复合userControl上调用Validate方法的行为也相同

我是否必须编写自己的递归函数来检查此表单上的错误

我加入代码也是为了让人们提供一般性的建议

Private Sub ComboOutOfCountry_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ComboOutOfCountry.Validating
    ValidateComboOutOfCountry()
End Sub

Private Sub ValidateComboOutOfCountry()

    If CheckOutOfCountry.Checked AndAlso _
      (ComboOutOfCountry.Value Is Nothing OrElse ComboOutOfCountry.Value = DBCodeConstants.Omited) Then
        ErrorProvider1.SetError(ComboOutOfCountry, "Country is required when ""Out of Country"" is selected")
    Else
        ErrorProvider1.SetError(ComboOutOfCountry, "")
    End If

End Sub

Private Sub CheckOutOfCountry_CheckedChanged1(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckOutOfCountry.CheckedChanged

    If Not CheckOutOfCountry.Checked Then
        ErrorProvider1.SetError(ComboOutOfCountry, "")
    End If

End Sub

Private Sub ComboOutOfCountry_ValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboOutOfCountry.ValueChanged

    ValidateComboOutOfCountry() 'Clear error icon immediately if they selected a country

End Sub

您可以很容易地将ErrorProvider子类化以实现这一点-参见示例