验证Winforms.NET 4.0 VB.NET中的空文本框时出现奇怪问题

验证Winforms.NET 4.0 VB.NET中的空文本框时出现奇怪问题,.net,vb.net,winforms,validation,.net,Vb.net,Winforms,Validation,我只是将验证添加到一个新的winform中。我正在使用验证和验证事件以及错误提供程序控件。请参阅下面的代码 首次验证没有问题(即,如果用户输入超过12个字符)。验证事件中设置了错误,并且错误将一直保持,直到用户输入12个或更少的字符已验证事件,并将错误重置为空字符串 但是,在同一文本框上进行第二次验证时存在问题。代码检查文本框中的长度是否为零。。并设置提供程序的错误。在调试器中观察,此代码确实被调用,并且错误设置为ok。然后奇怪的事情发生了,已验证的事件(意外)被触发,那里的代码立即重置错误 当

我只是将验证添加到一个新的winform中。我正在使用验证验证事件以及错误提供程序控件。请参阅下面的代码

首次验证没有问题(即,如果用户输入超过12个字符)。验证事件中设置了错误,并且错误将一直保持,直到用户输入12个或更少的字符<然后输入strong>已验证事件,并将错误重置为空字符串

但是,在同一文本框上进行第二次验证时存在问题。代码检查文本框中的长度是否为零。。并设置提供程序的错误。在调试器中观察,此代码确实被调用,并且错误设置为ok。然后奇怪的事情发生了,已验证的事件(意外)被触发,那里的代码立即重置错误

当已经存在错误集时,为什么会触发已验证的事件?这似乎是一个.NET错误。有人能提出另一种方法吗,或者说我做错了什么

谢谢

巴扎


当验证事件处理程序中的零长度文本检查失败时,需要将
CancelEventArgs.Cancel
属性设置为
True

从MSDN上的文章:

如果CancelEventArgs的Cancel属性在 正在验证事件委托,通常在 验证事件被抑制


当验证事件处理程序中的零长度文本检查失败时,需要将
CancelEventArgs.Cancel
属性设置为
True

从MSDN上的文章:

如果CancelEventArgs的Cancel属性在 正在验证事件委托,通常在 验证事件被抑制


下一个if块中是否缺少
e.Cancel=True

下一个if块中是否缺少
e.Cancel=True

Private Sub SampleCodeTextBox_Validating(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles SampleCodeTextBox.Validating
    If SampleCodeTextBox.Text.Length > 12 Then
        e.Cancel = True
        FormErrorProvider.SetError(SampleCodeTextBox, "Max of 12 characters for sample code")
    End If

    If SampleCodeTextBox.Text.Trim.Length = 0 Then
        FormErrorProvider.SetError(SampleCodeTextBox, "Must enter a sample code")
    End If
End Sub

Private Sub SampleCodeTextBox_Validated(sender As Object, e As System.EventArgs) Handles SampleCodeTextBox.Validated
    FormErrorProvider.SetError(SampleCodeTextBox, "")
End Sub