Friday, 31 March 2017

VB.NET - Validating InputBox

If you are working with the system that still uses InputBox control from Microsoft.VisualBasic then you may get a situation where the input needs to be validated. InputBox control does not allow any validation checks and in ideal case needs to be replaced with custom WinForms dialog box. This post will show a simple way of validating InputBox by creating InputBoxValidated function and using IStringValidator interface.

Public Class InputBoxValidated
    Public Function InputBoxValidated _
        prompt As String,
        title As String,
        Optional stringValidator As IStringValidator = Nothing,
        Optional validationMessage As String = ""
        ) As String
        Dim value As String _
            = Microsoft.VisualBasic.Interaction.InputBox(prompt, title)

        ' If the cancel button wasn't pressed 
        ' And IStringValidator is passed with validation message
        If Not value = String.Empty AndAlso stringValidator IsNot Nothing _
            AndAlso Not String.IsNullOrEmpty(validationMessage) Then
            If Not stringValidator.Validate(value) Then
                MessageBox.Show(validationMessage, Application.ProductName)
                value = InputBoxValidated(
                    prompt, title, stringValidator, validationMessage)
            End If
        End If

        Return value
    End Function
End Class

As you can see InputBoxValidated function uses IStringValidator interface that can implement any kind of string validations and criteria.

Public Interface IStringValidator
    Function Validate(value As String) As Boolean
End Interface

Below is an example of StringValidator class that implements IStringValidator interface and makes use of StringValidator from System.Configuration.

Public Class StringValidator
    Implements IStringValidator

    Public Sub New(maxLength As Integer, invalidCharacters As String)
        Me.MaxLength = maxLength
        Me.InvalidCharacters = invalidCharacters
    End Sub

    Public Property MaxLength As Integer
    Public Property InvalidCharacters As String
    Public Function Validate(value As String) _
        As Boolean Implements IStringValidator.Validate
        Dim valid As Boolean = True

            Dim stringValidator As _
                New System.Configuration.StringValidator _
                    (0, MaxLength, InvalidCharacters)
            If stringValidator.CanValidate(value.GetType()) Then
                valid = False
            End If
        Catch ex As ArgumentException
            valid = False
        End Try

        Return valid
    End Function
End Class


No comments:

Post a Comment