【问题标题】:VB form validation issueVB表单验证问题
【发布时间】:2012-04-15 10:47:15
【问题描述】:

我在 VB 中进行表单验证,我使用 txtName_LostFocus 函数验证文本字段数据,并且在输入错误时我使用了 txtName.Focus()。这对我来说很有用。但问题是,至于用户没有输入有效文本,我的退出按钮也不起作用。是否有任何解决方案可以纠正此解决方案。

【问题讨论】:

  • 你能把你正在做的代码放在哪里吗?

标签: .net vb.net winforms validation focus


【解决方案1】:

您遇到的问题是由于没有仔细阅读文档造成的。 LostFocus event 的文档非常清楚地表明,您应该尝试在此事件的处理程序方法中设置焦点(例如,通过调用 Focus method):

注意

不要尝试从 Enter、GotFocus、Leave、LostFocus、Validating 或 Validated 事件处理程序中设置焦点。这样做可能会导致您的应用程序或操作系统停止响应。有关详细信息,请参阅“键盘输入参考”部分中的 WM_KILLFOCUS 主题,以及位于 http://msdn.microsoft.com/library 的 MSDN 库中“关于消息和消息队列”主题的“消息死锁”部分。

更好的解决方案是处理Validating event。您将在 .NET Framework 自动引发的 Validating 事件处理程序方法中执行输入验证。

如果输入有效,则什么也不做。如果输入无效有效,则将CancelEventArgs 参数的Cancel 属性设置为true,从而抑制所有下游事件。

Private Sub myTextBox_Validating(ByVal sender As Object, _
                                 ByVal e As ComponentModel.CancelEventArgs) _
                             Handles myTextBox.Validating
    If Not Valid(myTextBox.Text) Then
        ' Validation failed, so cancel the event and pre-select the text.
        e.Cancel = True
        myTextBox.Select(0, myTextBox.Text.Length)

        ' Optionally (but recommended): Set an ErrorProvider control.
        ' errorProvider.SetError(myTextBox, "Invalid input")
    End If
End Sub

【讨论】:

  • 它工作正常,但用户无法退出,直到有效信息。我想,那个用户可能会离开/退出表单,他/她可能输入了错误的文本
  • @Shah 这也包含在链接的文档中。将“退出”按钮(以及您希望的任何其他控件)的CausesValidation 属性设置为true,以便单击它不会引发ValidatingValidated 事件。
猜你喜欢
  • 2014-08-16
  • 1970-01-01
  • 2011-07-17
  • 2013-04-13
  • 2015-10-09
  • 2015-12-09
  • 2017-08-29
  • 2011-06-21
相关资源
最近更新 更多