有没有其他方法来验证VB.net中的文本框值

时间:2010-06-24 13:02:50

标签: vb.net

我试图在运行时在vb.net中验证文本框值我有以下代码验证来自数据库表tblmachines的txtno。但我有图表类型和字符串类型的问题。有没有其他解决方案来解决这个问题?

Private Sub txtno_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtno.KeyPress
        If e.KeyChar = Microsoft.VisualBasic.ChrW(Keys.Return) Then
            e.Handled = True
            If (Me.txtno.Text = "") Then
                Interaction.MsgBox("!!!!!!!!Machine number can not be empty. Please Correct.!!!!!!!!", &H40, "Check Machine Number")
                Me.txtno.Focus()
            ElseIf (Me.txtno.Text = "0") Then
                Me.txtturnover.Focus()
            Else
                Dim table As DataTable = Me.DataSet1.Tables.Item("tblmachines")
                Dim defaultView As DataView = table.DefaultView
                defaultView.RowFilter = ("local_no='" & Me.txtno.Text & "'")
                If ((Char.IsLetter(CharType.FromString(Me.txtno.Text)) Or (defaultView.Count = 0)) Or (StringType.StrCmp(Me.txtno.Text, "", False) = 0)) Then
                    Interaction.MsgBox("This machine is not on database. Please correct machine number.", &H40, "Check Machine Number")
                    Me.txtno.Focus()
                Else
                    Me.txtturnover.Focus()
                End If

            End If
        End If

2 个答案:

答案 0 :(得分:2)

我认为使用Winforms库中的验证比使用KeyPress事件更好。 KeyPress将导致许多验证脚本运行并且会使您的应用陷入困境。

我认为你应该按照以下步骤进行验证

  1. 检查以确保texbox中有数据
  2. 验证在文本框中输入的数据格式是否正确。您可以使用常规代码,也可以使用RegEx。
  3. 验证输入的数字是数据库的一部分。我习惯于在将任何新过滤器应用到表格之前将过滤器重置为空白字符串。
  4. 使用内置验证的好处是你不必担心移动焦点。

    控件有一个名为CausesValidation的属性 - 如果将其设置为true(已经是),则此控件将运行验证代码。如果您不希望控件运行验证代码,则可以将该属性设置为False。

    验证发生在Focus移位时 - 因此当您关注控件时,会触发验证事件。

    事件ValidatingValidated通常用于此目的。您可以将代码验证放在那里,而不是将其放在KeyPress上。

答案 1 :(得分:1)

这不是让用户输入此特定数据的正确方法。您有一个数据库中可用的有效条目列表。将它们放在ComboBox中,这样用户就不必猜测也不会出错。