【问题标题】:VB.NET validate the form to check if empty fields or errors existsVB.NET 验证表单以检查是否存在空字段或错误
【发布时间】:2015-12-10 17:49:32
【问题描述】:

到目前为止,我已经编写了代码以保持禁用保存和更新按钮,直到用户填写 Groupbox 中的所有必填字段(文本框和组合框),但我也希望保存和更新按钮保持禁用状态,直到用户解决了表单中可用的所有错误,例如 Book_Name不得超过 50 个字符!

如果有人在这方面帮助我,我将不胜感激!

下面是我尝试这样做的代码,但不知何故它不起作用:

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

【问题讨论】:

  • 为什么不能为TBISBN.Text.Length < 13 添加测试?
  • @Plutonix 我可以控制所有字段 textchanged 事件,如果值与所需的正则表达式模式不匹配,则会出现 errorprovider。我现在想要的是保存/更新按钮保持禁用状态,直到所有错误都得到纠正!
  • 我理解了这个问题。
  • 那么@Plutonix 你能提供答案吗?

标签: vb.net validation error-handling


【解决方案1】:

使用错误提供程序或创建您自己的错误提供程序来执行您所需的任务,对于 ISBN 文本框说输入 MaxLength=13 它将在没有任何错误提供程序或验证程序的情况下完成任务,对于电子邮件的电话号码使用屏蔽文本框,或者如果您只想接受该文本框中的数字,则处理该文本框的文本更改事件

【讨论】:

  • 我可以控制所有字段 textchanged 事件,如果值与所需的正则表达式模式不匹配,则会出现 errorprovider。我现在想要的是保存/更新按钮保持禁用状态,直到所有错误都得到纠正!
  • 以 put y 的形式制作一个不可见的文本框,当所有错误都已更正且不再有错误时,如果有错误,则放入 y,在新文本框的文本更改事件中写入 if else 启用或禁用保存/更新。
  • 没明白你的意思?
【解决方案2】:

由于我 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

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多