我试图在运行时在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
答案 0 :(得分:2)
我认为使用Winforms库中的验证比使用KeyPress事件更好。 KeyPress将导致许多验证脚本运行并且会使您的应用陷入困境。
我认为你应该按照以下步骤进行验证
使用内置验证的好处是你不必担心移动焦点。
控件有一个名为CausesValidation的属性 - 如果将其设置为true(已经是),则此控件将运行验证代码。如果您不希望控件运行验证代码,则可以将该属性设置为False。
验证发生在Focus移位时 - 因此当您关注控件时,会触发验证事件。
事件Validating和Validated通常用于此目的。您可以将代码验证放在那里,而不是将其放在KeyPress上。
答案 1 :(得分:1)
这不是让用户输入此特定数据的正确方法。您有一个数据库中可用的有效条目列表。将它们放在ComboBox中,这样用户就不必猜测也不会出错。