在《VB.NET学习笔记:winform扩展TextBox控件——带数据字符串验证功能,支持正则表达式和自定义函数(一)》中,通过扩展TextBox控件,实现了数据验证功能,不需要开发人员再次对TextBox的内容进行验证,也不需要在相关的按钮里写判断语句,节省了对内容验证的时间,但其只能关联一个按钮,而且只能点击相关按钮才开始对TextBox的内容进行验证。而我需要在TextBox的内容改变时就对该TextBox内容进行验证,最后在点击按钮时再次对全部的TextBox控件内容进行验证,确保提交的数据正确无误,所以对上文中的代码进行了修改,现贴在本文,欢迎批评指正。
自定义事件参数
Namespace Controls
''' <summary>
''' 为自定义验证事件提供参数
''' </summary>
Public Class CustomerEventArgs
Inherits EventArgs
''' <summary>
''' 是否通过验证
''' </summary>
''' <returns></returns>
Public Property Validated As Boolean
''' <summary>
''' 获取或设置被验证的值
''' </summary>
''' <returns></returns>
Public Property Value As String
End Class
End Namespace
接口
Namespace Controls
Module ZyjqControl
Public Interface IZyjqControl
''' <summary>
''' 获取或设置验证控件的类型名称
''' </summary>
''' <returns></returns>
Property TypeName As String
''' <summary>
''' 获取或设置用于验证控件值的正则表达式
''' </summary>
''' <returns></returns>
Property RegexExpression As String
''' <summary>
''' 获取或设置显示的错误信息
''' </summary>
''' <returns></returns>
Property ErrorMessage As String
''' <summary>
''' 获取或设置显示错误信息的Label控件
''' </summary>
''' <returns></returns>
Property Label As Label
''' <summary>
''' 获取或设置是否允许空值,允许空值则为True
''' </summary>
''' <returns></returns>
Property AllowEmpty As Boolean
''' <summary>
''' 获取或设置验证的时候是否除去头尾空格,为True则除去头尾空格
''' </summary>
''' <returns></returns>
Property RemoveSpace As Boolean
''' <summary>
''' 全选控件文本
''' </summary>
Sub SelectAll()
''' <summary>
''' 引发自定义验证事件
''' </summary>
''' <param name="ce"></param>
Sub RaiseCustomerValidated(ByVal ce As CustomerEventArgs)
''' <summary>
''' 自定义验证事件
''' </summary>
Event CustomerValidated As EventHandler(Of CustomerEventArgs)
End Interface
End Module
End Namespace
验证类(共享类)
Imports System.Text.RegularExpressions
Namespace Controls
Public NotInheritable Class ZyjqValidated
'由于此类只提供静态方法,因此将默认构造函数设为私有以防止
'使用“new ZyjqValidated()”创建的实例'。
Private Sub New()
End Sub ' New
''' <summary>
''' 存储相关控件与对应类型名称关系的列表
''' </summary>
Private Shared ht As Hashtable = New Hashtable()
''' <summary>
''' 将控件添加到控制列表
''' </summary>
''' <param name="typeName">类型名称</param>
''' <param name="control">需验证的控件</param>
Public Shared Sub AddControl(ByVal typeName As S