[自定义服务器控件] 第一步:文本框。

最近在整理我写的几个服务器控件,发出来与大家共享吧。

我写的自定义服务器控件呢分为两个类,

一是“简单继承”控件,就是继承框架里的控件然后加点属性了、事件了什么的。
二是“功能”控件,简单的说那是符合控件,但是呢是以实现一种功能为目的地。这种控件要实现某一种功能,比如分页的功能,添加、修改数据的功能,查询的功能。

原先呢还不会使用接口了什么的,所以呢代码写得有点不太“好看”,现在使用接口、继承了什么的来整理一下。

先发一个“文本框”的吧,就是继承系统的 TextBox,然后加上几个属性、方法。

属性:
TextTrim  返回.Text.Trim()
TextTrimNone 返回 .Text.Trim.Replace("'", "")
CheckDataType 设置 文本框的验证类型。
CheckDataReg  设置 文本框的验证用的正则表达式。
CheckErrorMessage 设置 当没有通过验证时显示给客户的提示信息。

属性(接口):
ControlKind  返回控件的类型。

函数(接口):
GetValue() 获取文本框的值,默认返回   TextTrim
GetValue(ByVal kind As String) 根据 kind 获取对应的文本框的值。

SetValue(ByVal value As String) 给文本框赋值
SetValue(ByVal value As String, ByVal kind As String)给文本框赋值

取值和赋值为什么会有两套呢?那是为了和其他控件兼容,说到后面就好理解了。

定义接口。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。Public Interface IGetControlValueInterface IGetControlValue
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
ReadOnly Property ControlKind()Property ControlKind() As String
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Function GetControlValue()Function GetControlValue() As String
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Function GetControlValue()Function GetControlValue(ByVal kind As StringAs String
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Sub SetControlValue()Sub SetControlValue(ByVal value As String)
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Sub SetControlValue()Sub SetControlValue(ByVal value As StringByVal kind As String)
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
End Interface


文本框的代码。
[自定义服务器控件] 第一步:文本框。Imports System.ComponentModel
[自定义服务器控件] 第一步:文本框。
Imports System.Web.UI
[自定义服务器控件] 第一步:文本框。
Imports HBS
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
<DefaultProperty("Text"), ToolboxData("<{0}:HBSTextBox runat=server></{0}:HBSTextBox>")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。 
Public Class HBSTextBoxClass HBSTextBox
[自定义服务器控件] 第一步:文本框。    
Inherits System.Web.UI.WebControls.TextBox
[自定义服务器控件] 第一步:文本框。    
Implements INamingContainer
[自定义服务器控件] 第一步:文本框。    
Implements IGetControlValue
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
Dim _dataType As String = "101"   '数据类型
[自定义服务器控件] 第一步:文本框。

[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。
实现接口#Region "实现接口"
[自定义服务器控件] 第一步:文本框。    
<Bindable(True), Category("默认值"), DefaultValue("201"), Description("获取控件类别")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。       
ReadOnly Property ControlKind()Property ControlKind() As String Implements IGetControlValue.ControlKind
[自定义服务器控件] 第一步:文本框。        
Get
[自定义服务器控件] 第一步:文本框。            
Return "201"
[自定义服务器控件] 第一步:文本框。        
End Get
[自定义服务器控件] 第一步:文本框。    
End Property

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Public Function GetValue()Function GetValue() As String Implements IGetControlValue.GetControlValue
[自定义服务器控件] 第一步:文本框。        
Return Me.TextTrimNone
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
End Function

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Public Function GetValue()Function GetValue(ByVal kind As StringAs String Implements IGetControlValue.GetControlValue
[自定义服务器控件] 第一步:文本框。        
Return Me.TextTrimNone
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
End Function

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Public Sub SetValue()Sub SetValue(ByVal value As StringImplements IGetControlValue.SetControlValue
[自定义服务器控件] 第一步:文本框。        
Me.Text = value
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
End Sub

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Public Sub SetValue()Sub SetValue(ByVal value As StringByVal kind As StringImplements IGetControlValue.SetControlValue
[自定义服务器控件] 第一步:文本框。        
Me.Text = value
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
End Sub

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
#End Region

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。
设置文本框的 Text 属性;获取 Text.Trim()#Region "设置文本框的 Text 属性;获取 Text.Trim()"
[自定义服务器控件] 第一步:文本框。    
<Bindable(True), Category("文本值"), Description("设置文本框的 Text 属性;返回 Text.Trim()。")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Property TextTrim()Property TextTrim() As String
[自定义服务器控件] 第一步:文本框。        
Set(ByVal Value As String)
[自定义服务器控件] 第一步:文本框。            
Me.Text = Value
[自定义服务器控件] 第一步:文本框。        
End Set
[自定义服务器控件] 第一步:文本框。        
Get
[自定义服务器控件] 第一步:文本框。            
Return Me.Text.Trim()
[自定义服务器控件] 第一步:文本框。        
End Get
[自定义服务器控件] 第一步:文本框。    
End Property

[自定义服务器控件] 第一步:文本框。
#End Region

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。
设置文本框的 Text 属性;获取 Text.Trim()#Region "设置文本框的 Text 属性;获取 Text.Trim()"
[自定义服务器控件] 第一步:文本框。    
<Bindable(True), Category("文本值"), Description("设置文本框的 Text 属性;返回 Text.Trim()。")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Property TextTrimNone()Property TextTrimNone() As String
[自定义服务器控件] 第一步:文本框。        
Set(ByVal Value As String)
[自定义服务器控件] 第一步:文本框。            
Me.Text = Value
[自定义服务器控件] 第一步:文本框。        
End Set
[自定义服务器控件] 第一步:文本框。        
Get
[自定义服务器控件] 第一步:文本框。            
Return Me.Text.Trim.Replace("'""")
[自定义服务器控件] 第一步:文本框。        
End Get
[自定义服务器控件] 第一步:文本框。    
End Property

[自定义服务器控件] 第一步:文本框。
#End Region

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。
验证类型#Region "验证类型"
[自定义服务器控件] 第一步:文本框。    
<Category("数据验证"), Description("验证输入的内容,需要js脚本配合。"), DefaultValue("101")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Property CheckDataType()Property CheckDataType() As String
[自定义服务器控件] 第一步:文本框。        
Set(ByVal Value As String)
[自定义服务器控件] 第一步:文本框。            _dataType 
= Value
[自定义服务器控件] 第一步:文本框。            
'101        b不验证
[自定义服务器控件] 第一步:文本框。
            '102        z自然数
[自定义服务器控件] 第一步:文本框。
            '103        z整数
[自定义服务器控件] 第一步:文本框。
            '104        x小数
[自定义服务器控件] 第一步:文本框。
            '105        r日期
[自定义服务器控件] 第一步:文本框。
            '106        b必填
[自定义服务器控件] 第一步:文本框。
            Select Case Value
[自定义服务器控件] 第一步:文本框。                
Case "101" '不验证
[自定义服务器控件] 第一步:文本框。
                    'this.Attributes.Add("DataType","");
[自定义服务器控件] 第一步:文本框。
                Case "102" '自然数
[自定义服务器控件] 第一步:文本框。
                    Me.Attributes.Add("check""^[0-9]+$")
[自定义服务器控件] 第一步:文本框。                
Case "103" '整数
[自定义服务器控件] 第一步:文本框。
                    Me.Attributes.Add("check""^\S?([0-9]+)$")
[自定义服务器控件] 第一步:文本框。                
Case "104" '小数                [0-9]{1,5}\.[0-9]{1,2}  ^-?([0]$|^([0-9]{1,5}\.[0-9]{1,2})?$
[自定义服务器控件] 第一步:文本框。
                    Me.Attributes.Add("check""^\S(\-?[0-9]*(\.[0-9]*)?)$")
[自定义服务器控件] 第一步:文本框。                    
'Me.Attributes.Add("check", "^d")
[自定义服务器控件] 第一步:文本框。
                Case "105" '时间
[自定义服务器控件] 第一步:文本框。
                    Me.Attributes.Add("check""^d{4}-d{1,2}-d{1,2}")
[自定义服务器控件] 第一步:文本框。                
Case "106" '必填项
[自定义服务器控件] 第一步:文本框。
                    Me.Attributes.Add("check"".+")
[自定义服务器控件] 第一步:文本框。            
End Select
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。        
End Set
[自定义服务器控件] 第一步:文本框。        
Get
[自定义服务器控件] 第一步:文本框。            
If _dataType Is Nothing Then
[自定义服务器控件] 第一步:文本框。                
Return ""
[自定义服务器控件] 第一步:文本框。            
End If
[自定义服务器控件] 第一步:文本框。            
Return _dataType
[自定义服务器控件] 第一步:文本框。        
End Get
[自定义服务器控件] 第一步:文本框。    
End Property

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
<Category("数据验证"), Description("验证输入的内容,传入正则表达式。"), DefaultValue("0")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。   
Property CheckDataReg()Property CheckDataReg() As String
[自定义服务器控件] 第一步:文本框。        
Set(ByVal Value As String)
[自定义服务器控件] 第一步:文本框。            
Me.Attributes.Add("check", Value)
[自定义服务器控件] 第一步:文本框。        
End Set
[自定义服务器控件] 第一步:文本框。        
Get
[自定义服务器控件] 第一步:文本框。            
If Me.Attributes.Item("check"Is Nothing Then
[自定义服务器控件] 第一步:文本框。                
Return ""
[自定义服务器控件] 第一步:文本框。            
End If
[自定义服务器控件] 第一步:文本框。            
Return Me.Attributes.Item("check").ToString()
[自定义服务器控件] 第一步:文本框。        
End Get
[自定义服务器控件] 第一步:文本框。    
End Property

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
#End Region

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。
验证错误的提示信息#Region "验证错误的提示信息"
[自定义服务器控件] 第一步:文本框。    
<Description("验证错误提示信息")> _
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。      
Property CheckErrorMessage()Property CheckErrorMessage() As String
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。        
'添加提示信息
[自定义服务器控件] 第一步:文本框。
        Set(ByVal Value As String)
[自定义服务器控件] 第一步:文本框。            ViewState(
"msg"= Value
[自定义服务器控件] 第一步:文本框。            
Me.Attributes.Add("warning", Value)
[自定义服务器控件] 第一步:文本框。        
End Set
[自定义服务器控件] 第一步:文本框。        
Get
[自定义服务器控件] 第一步:文本框。            
If (ViewState("msg"Is NothingThen
[自定义服务器控件] 第一步:文本框。                
Return ""
[自定义服务器控件] 第一步:文本框。            
Else
[自定义服务器控件] 第一步:文本框。                
Return ViewState("msg").ToString()
[自定义服务器控件] 第一步:文本框。            
End If
[自定义服务器控件] 第一步:文本框。        
End Get
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
End Property

[自定义服务器控件] 第一步:文本框。
#End Region

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。[自定义服务器控件] 第一步:文本框。    
Protected Overrides Sub OnInit()Sub OnInit(ByVal e As EventArgs)
[自定义服务器控件] 第一步:文本框。        
If Not Me.CssClass Is Nothing Then
[自定义服务器控件] 第一步:文本框。            
Me.CssClass = "txts"
[自定义服务器控件] 第一步:文本框。            
Me.Attributes.Add("DataID""")
[自定义服务器控件] 第一步:文本框。            
Me.Attributes.Add("DataIDs""")
[自定义服务器控件] 第一步:文本框。        
End If
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。    
End Sub

[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
[自定义服务器控件] 第一步:文本框。
End Class

[自定义服务器控件] 第一步:文本框。

FAQ:

1、文本框的验证是如何实现的?
    使用正则表达式来验证,在具体点说呢就是使用了一个不知道是谁写一个js函数,就是 checkForm(oForm) 来验证的。
    http://www.cnblogs.com/jyk/archive/2007/09/20/899406.html 这里有具体的说明。

2、为什么使用VB.net来写?
    很简单,好写。用VB.net写代码还是很方便的,也是很宽松的。好多在C#里不能通过编译的代码,在VB.net里面就可以正常使用,而且提示也是很“智能”的,当初刚写控件的时候还是不太熟悉,VB.net是很好的选择。
   

以后会陆续说明其他的控件。
上一篇:【自然框架】之通用权限(二):人员表组


下一篇:LeetCode 热题 HOT 100 第40天:“对称二叉树”