Showing posts with label VB.NET. Show all posts
Showing posts with label VB.NET. Show all posts

Friday, March 31, 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