1

我只是将验证添加到新的 winform 中。我将验证验证事件与错误提供程序控件结合使用。请看下面的代码。

第一次验证没有问题(即,如果用户输入超过 12 个字符)。在验证事件中设置错误,并且错误一直存在,直到用户输入 12 个或更少的字符。然后输入经过验证的事件并将错误重置为空字符串。

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

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

谢谢,

巴扎

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
4

2 回答 2

2

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

来自关于Control.Validated 事件的 MSDN 文章:

如果在 Validating 事件委托中将 CancelEventArgs 的 Cancel 属性设置为 true,则通常会在 Validating 事件之后发生的所有事件都将被抑制。

于 2012-06-21T03:34:27.923 回答
2

你没有e.Cancel = True在下一个 if 块中丢失吗?

于 2012-06-21T03:35:11.340 回答