用户输入的表单控件验证(VB.NET 2005)

时间:2014-09-06 17:43:21

标签: vb.net visual-studio validation

我正在为我的公证业务编写申请表。我是爱荷华州的公证人。

我在表单上有很多类型的控件。 ComboBox(可以修改),TextBox和MaskedTextBox。 我知道我可以使用TextBoxBase类来覆盖TextBox以及MaskedTextBox,但是我的验证代码没有做任何事情。没有任何事情发生。

我在名为ErrorProvider的表单上有一个ErrorProvider。它将“AutoValidate”选项设置为“EnableAllowFocusChange”。 BlinkStyle设置为AlwaysBlink。所有其他属性都是默认属性。

表格上也有三个按钮。重置,保存并关闭。 Reset和Close按钮都设置为CausesValidation = False,Save按钮设置为CausesValidation = True。

单击“保存”按钮时,我需要确保“必填”字段具有值。

所以,我想我会使用控件的Validated和Validating事件。但是,单击“保存”时,没有任何反应。 ErrorProvider甚至没有显示。如果我把控件留空,仍然没有任何反应。

这是我的代码:

    Private Sub Company_Validated(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Company.Validated, CompanyAddress.Validated, CompanyCity.Validated, CompanyZipCode.Validated, CompanyPhone.Validated, CompanyAddressRemit.Validated, CompanyCityRemit.Validated, CompanyZipCodeRemit.Validated
    ErrorProvider.SetError(CType(sender, TextBoxBase), String.Empty)
End Sub

Private Sub Company_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) _
Handles Company.Validating, CompanyAddress.Validating, CompanyCity.Validating, CompanyZipCode.Validating, CompanyPhone.Validating, CompanyAddressRemit.Validating, CompanyCityRemit.Validating, CompanyZipCodeRemit.Validating
    Dim ErrorMessage As String = String.Empty
    Dim TheField As TextBoxBase = CType(sender, TextBoxBase)

    If TypeOf TheField Is MaskedTextBox Then
        CType(TheField, MaskedTextBox).TextMaskFormat = MaskFormat.ExcludePromptAndLiterals
    End If

    If Not IsValid(TheField, ErrorMessage) Then
        e.Cancel = True
        TheField.Select(0, TheField.Text.Length)
        ErrorProvider.SetError(TheField, ErrorMessage)
    End If
End Sub

Private Function IsValid(ByVal ControlName As TextBoxBase, ByVal ErrorMessage As String) As Boolean
    If String.IsNullOrEmpty(ControlName.Text.ToString) Then
        ErrorMessage = "This is a required field."
        Return False
    Else
        ErrorMessage = String.Empty
        Return True
    End If
End Function

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:0)

vb.net中的String类有点“奇怪”。它是一种引用类型(不是所有情况)都像值类型一样。您需要将ByVal更改为ByRef

Private Function IsValid(ByVal ControlName As TextBoxBase, ByRef ErrorMessage As String) As Boolean