我有一个复合用户控件,其中包含一个下拉菜单“Country”控件和一个复选框。如果选中该复选框,我想显示带有工具提示消息的验证图标,通知用户需要选择国家/地区。
如果用户尝试保存更改,我想检查整个表单,包括此复合用户控件,以查找错误,如果找到,则取消保存。
我希望在表单中,我能够调用Me.Validate函数,并且该函数将递归地检查任何级别的表单上的任何控件,并返回一个值,指示是否存在错误。相反,该函数似乎触发所有控件的验证事件(我猜这没关系)并且UNCONDITIONALLY返回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
答案 0 :(得分:1)
您可以轻松地将ErrorProvider子类化以实现此目的 - 请参阅http://dotnetslackers.com/Community/blogs/dsmyth/archive/2007/10/12/custom-error-provider.aspx以获取示例。