VB.NET验证表单以检查是否存在空字段或错误
到目前为止,我已经编写了代码,在用户填写Groupbox中的所有必填字段(文本框和组合框)之前,保存和更新按钮保持禁用状态,但我也希望保存和更新按钮保持禁用状态,直到用户解决了表单中的所有可用错误,例如Book_名称不应超过50个字符 如果有人能在这方面帮助我,我将不胜感激 下面是我尝试执行上述操作的代码,但不知何故它不起作用:VB.NET验证表单以检查是否存在空字段或错误,vb.net,validation,error-handling,Vb.net,Validation,Error Handling,到目前为止,我已经编写了代码,在用户填写Groupbox中的所有必填字段(文本框和组合框)之前,保存和更新按钮保持禁用状态,但我也希望保存和更新按钮保持禁用状态,直到用户解决了表单中的所有可用错误,例如Book_名称不应超过50个字符 如果有人能在这方面帮助我,我将不胜感激 下面是我尝试执行上述操作的代码,但不知何故它不起作用: Private Sub ValidateInputs(ByVal Sender As Object, ByVal e As EventArgs) Dim ctr
Private Sub ValidateInputs(ByVal Sender As Object, ByVal e As EventArgs)
Dim ctrl As Control
Dim strErrorList As String
strErrorList = ""
For Each ctrl In Me.Controls
If Len(ErrorProvider1.GetError(ctrl)) > 0 Then
strErrorList += ErrorProvider1.GetError(ctrl) & ChrW(10) &
ChrW(13)
End If
Next
If Len(strErrorList) = 0 Then
' Process stuff if no errors
btnsave.Enabled = Not GroupBox1.Controls.OfType(Of TextBox).Any(Function(t) t.Text = String.Empty) And _
Not (cboStaff_id.Text = String.Empty OrElse cboPub_id.Text = String.Empty OrElse cboSub_Code.Text = String.Empty _
OrElse DateTimePicker1.Text = " ")
btnSaveUpdate.Enabled = Not GroupBox1.Controls.OfType(Of ComboBox).Any(Function(cbo) cbo.Text = String.Empty) And _
Not (txtbook_name.Text = String.Empty OrElse txtauthor.Text = String.Empty OrElse txtprice.Text = String.Empty _
OrElse txtrack_no.Text = String.Empty OrElse TxtNo_of_Books.Text = String.Empty OrElse txtvol_no.Text = String.Empty OrElse DateTimePicker1.Text = " ")
btndelete.Enabled = Not (cboISBN.Text = String.Empty)
Else
btnsave.Enabled = False
btnSaveUpdate.Enabled = False
MessageBox.Show(strErrorList, "List Of Errors")
End If
End Sub
使用错误提供程序或创建您自己的错误提供程序来执行您和ISBN文本框所需的任务,例如,输入MaxLength=13,它将在没有任何错误提供程序或验证程序的情况下执行任务,对于电子邮件的电话号码,使用屏蔽文本框,或者,如果您只想接受文本框中的数字,请处理文本框的文本更改事件因为我4天前问了这个问题,但没有人提供解决问题的答案,所以我研究并重新检查了我的代码,找到了解决问题的方法 因此,我将解释每一点,以澄清我所做的
'Below disables numeric entry; only characters and spaces allowed with the help of ASCII values
Private Sub txtbook_name_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtbook_name.KeyPress
If Not (Asc(e.KeyChar) = 8) Then
If Not ((Asc(e.KeyChar) >= 97 And Asc(e.KeyChar) <= 122) _ Or (Asc(e.KeyChar) >= 65 _
And Asc(e.KeyChar) <= 90) _
Or (Asc(e.KeyChar) = 32)) Then
e.KeyChar = ChrW(0)
e.Handled = True
End If
End If
End Sub
'Bellow function return only true if input matches Regex pattern in other cases false
Private Function ValidBook_name(ByVal book_name As String, ByRef errorMessage As String) As Boolean
Dim regex As New System.Text.RegularExpressions.Regex("^[a-zA-Z ]{1,50}$")
' Confirm there is text in the control.
If txtbook_name.Text.Length = 0 Then
errorMessage = "Book Name is required"
Return False
End If
If txtbook_name.Text.Length > 50 Then
errorMessage = "Book Name can not be more than 50"
Return False
End If
'Confirm that book name is in character not number
If (regex.IsMatch(Trim(txtbook_name.Text))) Then
errorMessage = ""
Return True
End If
errorMessage = "A valid Book Name is required" + ControlChars.Cr
Return False
End Function
'Check whether input entered is valid or not; if not return cursor to control
Private Sub txtbook_name_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) Handles txtbook_name.Validating
Dim errorMsg As String
Try
If Not ValidBook_name(txtbook_name.Text, errorMsg) Then
' Cancel the event and select the text to be corrected by the user.
e.Cancel = True
txtbook_name.Select(0, txtbook_name.Text.Length)
' Set the ErrorProvider error with the text to display.
Me.ErrorProvider1.SetError(txtbook_name, errorMsg)
End If
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
Private Sub txtbook_name_Validated(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles txtbook_name.Validated
' If all conditions have been met, clear the error provider of errors.
Try
ErrorProvider1.SetError(txtbook_name, "")
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
下面的”禁用数字输入;在ASCII值的帮助下,只允许使用字符和空格
私有子txtbook_name_KeyPress(发送方作为对象,e作为KeyPressEventArgs)处理txtbook_name.KeyPress
如果不是(Asc(e.KeyChar)=8),则
如果不是((Asc(e.KeyChar)>=97和Asc(e.KeyChar)=65_
然后是Asc(e.KeyChar)50
errorMessage=“书籍名称不能超过50”
返回错误
如果结束
'确认图书名称是字符而不是数字
如果(regex.IsMatch(Trim(txtbook_name.Text)),那么
errorMessage=“”
返回真值
如果结束
errorMessage=“需要有效的图书名称”+ControlChars.Cr
返回错误
端函数
'检查输入的输入是否有效;如果无效,则将光标返回控件
私有子txtbook\u name\u验证(ByVal发送方作为对象_
ByVal e作为System.ComponentModel.CancelEventArgs)处理txtbook_name
Dim errorMsg作为字符串
尝试
如果未验证Book_name(txtbook_name.Text,errorMsg),则
'取消事件并选择要由用户更正的文本。
e、 取消=真
txtbook_name.Select(0,txtbook_name.Text.Length)
'使用要显示的文本设置ErrorProvider错误。
Me.ErrorProvider1.SetError(txtbook\u名称,errorMsg)
如果结束
特例
MessageBox.Show(例如Message)
结束尝试
端接头
私有子txtbook\u name\u已验证(ByVal发送方作为对象_
ByVal e As System.EventArgs)处理txtbook_name.Validated
'如果满足所有条件,请清除错误提供程序中的错误。
尝试
ErrorProvider1.SetError(txtbook_name,“”)
特例
MessageBox.Show(例如Message)
结束尝试
端接头
希望这有帮助…为什么你不能为
TBISBN.Text.Length<13
添加一个测试?@puropoix我可以控制所有字段textchanged event,如果值与所需的正则表达式模式不匹配,errorprovider将出现。我现在想要的是保存/更新按钮保持禁用状态,直到所有错误得到纠正!我明白了问题。那么@Proputinix您能提供答案吗?我可以控制所有字段textchanged event,如果值与所需的正则表达式模式不匹配,则会出现errorprovider。我现在想要的是,保存/更新按钮保持禁用状态,直到所有错误得到纠正!在所有错误被纠正后,在表单中创建一个不可见的文本框put y已更正且无更多错误,如果有错误,请在新文本框的文本更改事件中输入y,如果有,请写入“如果其他”以启用或禁用保存/更新。不明白您的意思吗?