Introduction
This article explains how a basic Error Provider class can be extended to include more functionality. This extended class can reduce coding significantly for validating mandatory objects on Windows Form.
Features
- Validate multiple controls without writing events for each control separately.
If you use basic Error Provider, you need to write validating event for each control that you want to check. For example, for checking txtStudentName
text box control, you might write code as below:
Private Sub txtStudentName_Validating(ByVal sender As Object, _
ByVal e As System.ComponentModel.CancelEventArgs) _
Handles txtStudentName.Validating
If txtStudentName.Text = "" Then
ErrorProvider1.SetError(txtStudentName, "Please enter student name")
Else
ErrorProvider1.SetError(txtStudentName, "")
End If
End Sub
You need to write the same event for each control that you want to validate. It increases code significantly in bigger projects.
But with extended error provider, all you need to write is just:
MyErrorProvider.Controls.Add(txtStudentName, "Student Full Name", _
"Please enter student name")
- Display custom message box.
With extended error provider, you can set custom error message box for missing fields which are mandatory.
- Conditional validation of controls.
You can enable or disable validation control based upon certain conditions.
Usage of ErrorProviderExtended class
- Method for adding controls:
MyErrorProvider.Controls.Add(<ControlName> as String,<DisplayName(Optional)>
as String,<ErrorMessage(Optional)> as String)
- Setting summary message:
MyErrorProvider.SummaryMessage = "Following fields are mandatory,"
- Enabling/Disabling control validation:
MyErrorProvider.Controls(txtEmergencyContact).Validate = False
Using the Code
Open ErrorProvidelExtended.sln in Visual Studio .NET. There are two projects inside ErrorProvidelExtended.sln. The first project is Extended Error Provider class. The second project is a sample usage for extended error provider.
Using the extended error provider is fairly simple. The description of code is included as comments.
Dim MyErrorProvider As New ErrorProviderExtended
Private Sub TestForm_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
MyErrorProvider.Controls.Add(txtStudentName, "Student Full Name")
MyErrorProvider.Controls.Add(txtStudentAge, "Age")
MyErrorProvider.Controls.Add(txtEmergencyContact, "Emergency Contact Number")
MyErrorProvider.Controls(txtEmergencyContact).Validate = False
MyErrorProvider.SummaryMessage = "Following fields are mandatory,"
End Sub
Private Sub cmdSubmit_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles cmdSubmit.Click
If MyErrorProvider.CheckAndShowSummaryErrorMessage = True Then
MessageBox.Show("Data submitted successfully.")
End If
End Sub
Private Sub chkAge_CheckedChanged(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles chkAge.CheckedChanged
If chkAge.Checked Then
MyErrorProvider.Controls(txtEmergencyContact).Validate = True
Else
MyErrorProvider.Controls(txtEmergencyContact).Validate = False
End If
End Sub
End Class
Description of ErrorProviderExtended
class is included as comments in the source code.
Points of Interest
I have used an extended collection base class for ErrorProviderExtended.Controls
property. It uses the ValidationControlCollection
class which is derived from the CollectionBase
class. Each control is of type ValidationControl
. ValidationControl
class has all required properties like DisplayName
, ErrorMessage
, Validate
, ControlObj
, etc.
Updates
The source code is now available in C# (Visual Studio 2005) edition.