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

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

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

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

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

先发一个“文本框”的吧,就是继承系统的 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 String) As String

    Sub SetControlValue()Sub SetControlValue(ByVal value As String)
    Sub SetControlValue()Sub SetControlValue(ByVal value As String, ByVal 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 String) As String Implements IGetControlValue.GetControlValue
        Return Me.TextTrimNone

    End Function

    Public Sub SetValue()Sub SetValue(ByVal value As String) Implements IGetControlValue.SetControlValue
        Me.Text = value

    End Sub

    Public Sub SetValue()Sub SetValue(ByVal value As String, ByVal kind As String) Implements 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 Nothing) Then
                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是很好的选择。
   
以后会陆续说明其他的控件。

时间: 2024-08-02 00:26:29

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

我在页面上有五个文本框,我想在输完最后一个文本框的内容以后,回车以后将五个文本框的内容都清空,并将焦点回到第一个文本框处

问题描述 我在页面上有五个文本框,我想在输完最后一个文本框的内容以后,回车以后将五个文本框的内容都清空,并将焦点回到第一个文本框处.该如何实现,请大家指教!我试了一下大虾们以前解答的帖子,document.formname.inputname.value="",它报错是"未声明名称'document'",请问我该如何声明呢?我用的是VS2005环境 解决方案 解决方案二:,document.formname.inputname.value=""是

word2007向文本框添加填充或效果

  您可以更改文本框 (文本框:一种可移动.可调大小的文字或图形容器.使用文本框,可以在一页上放置数个文字块,或使文字按与文档中其他文字不同的方向排列.)的外观,方法是更改它的填充或向其添加各种效果,例如阴影.发光.映像.柔化边缘.棱台和三维 (3-D) 旋转. 本文内容 ●填充.渐变和效果概述 ●添加或更改文本框填充 ●添加或更改文本框效果 ●删除文本框填充 ●删除文本框效果 填充.渐变和效果概述 填充是指文本框的内饰.更改文本框的填充颜色时,还可以向填充中添加纹理.图片或渐变.渐变是指颜色和

金山WPS创建文本框链接的步骤

  在今天的金山WPS使用教程中,我们将为大家分享的是创建文本框链接这一功能的使用方法,那么,就有网友想知道了金山WPS怎么连接文本框,以及金山WPS创建文本框链接的具体步骤了.关于这两个问题,您都可以在今天的金山WPS使用教程找到答案,感兴趣的朋友可以学习下. 金山WPS怎么连接文本框? 如果是指文字直接连接到另一个文本框可以用"链接到文本框"试试,点击功能后选择另外一个空的文本框,此时第一个文本框填满时,再输入文字,文字会自动填到另外一个文本框中. 功能具体位置:点击文本框,此时功

多个Word文本框共同显示大段文字

本文介绍如何利用Word文本框的内容链接,制作多个文本框共同合作显示一段文字. 当你在Word文档中绘制了多个文本框时,可将各个文本框链接在一起,以使文本能够从一个文本框延续到另一个文本框.让文字在文本框间玩玩接力游戏,不仅很是有趣,而且能够满足用户的某些特殊实际需求.如果你也有这种需要或者是仅仅想尝试以下,那就跟笔者一起来吧. 启动Word2010并新建一个文档或者打开需要的已经存在的文档.切换到"插入"选项卡,在"文本"组中,单击"文本框",

wps链接文本框使填表更容易

人在职场,少不了要经常填表.如图1就是一个我们经常要填的表格示例. 我们看到,"自我鉴定"一栏为跨页栏,这就出现了一个问题:当第一页的内容填满后,文字并不会自动进入第二页相应单元格内.而是自动将第一页的单元格扩展到第二页,又把第二页原来的表格全部搞乱.当然,我们可以手动将文档分成两个部分,一部分放到第一页,另一部分放到第二页.但是,如果这样的话,当第一页中的文字需要调整时,还必须重复分页,真有些不胜其烦. 其实,用链接文本框的方式,可以完美解决这个问题. 首先,分别在"自我鉴

Word入门动画教程76:创建文本框链接

在文档中建立两个或多个空文本框,选中第一个,在网状边框上单击右键,选择"创建文本框链接",此时鼠标指针变为直立的杯状,将其移至第二个文本框中,鼠标指针变为倾斜的杯状,单击鼠标,即可完成链接. 若要继续链接到其它文本框,可选中第二个文本框,按上述方法"注水"至第三个文本框,依次类推. 文字输入过程中,如果第一个文本框已满,插入点将自动转入其链接的下一个文本框中继续显示文字. 注意: 1.只有空文本框才能接受链接,一个文本框只能接受一个链接. 2.链接过程中,按Esc键

多个Word文本框合作显示大段文字

当你在Word文档中绘制了多个文本框时,可将各个文本框链接在一起,以使文本能够从一个文本框延续到另一个文本框.让文字在文本框间玩玩接力游戏,不仅很是有趣,而且能够满足用户的某些特殊实际需求.如果你也有这种需要或者是仅仅想尝试以下,那就跟笔者一起来吧. 启动Word2010并新建一个文档或者打开需要的已经存在的文档.切换到"插入"选项卡,在"文本"组中,单击"文本框",从弹出的菜单列表中单击"绘制文本框",然后在文档中单击,并通

JavaScript获取/更改文本框的值

尽管<input type="text" />和<textarea />是不同元素,但它们均支持同样的特性来获取包含在文本框内的文本.考虑以下例子: <html> <head> <title>Retrieying a Textbox Value Example</title> <script type="text/javascript"> function getValues(){

WPS怎么创建文本框链接

  金山WPS怎么连接文本框? 如果是指文字直接连接到另一个文本框可以用"链接到文本框"试试,点击功能后选择另外一个空的文本框,此时第一个文本框填满时,再输入文字,文字会自动填到另外一个文本框中. 功能具体位置:点击文本框,此时功能区上会出现一个"绘图工具"选项卡,从里面去找到"创建文本框链接"即可.如图: 金山WPS创建文本框链接具体步骤: 1.打开或者新建一个Wps文档. 2.点击顶部的"插入",然后选择"文本框