Vb.net web控件---数字控件

本文介绍如何在VB.NET的Web应用程序中创建一个自定义文本框控件,只允许用户输入数字。通过使用JavaScript的KeyPress事件,结合.NET的TextBox属性,实现了在客户端进行输入验证的功能。

实现功能:
       对文本框输入的只能数字.
实现分析:
       在网页中(asp)我们比较熟悉的,对文本框输入验证是通过java来实现
       对input的KeyPress,Keydown,KeyUp事件来处理.
      首先我们可以建一个html 文件,加入一个Input text 来实现这个功能.
我采用KeyPress事件所用的Java代码为:

我采用KeyPress事件所用的Java代码为:
function numbereditor_keypress(e)
{
var newkeypress=event.keyCode;//这里应该要先赋值吧,不然直接试用if在我个人电脑测试通不过.
if(newkeypress>48 && newkeypress<57)
{
return true; //是数字 可以输入  返回true
}
else
{
//event.keyCode="";
return false;
}
}


在.net中,我们只要对textbox的输入进行判断,可以采用textbox的attribute功能来添加一个onkeypress事件.
程序完整代码和注释:
Imports System
Imports System.Text
Imports System.Web.UI.WebControls
Imports System.ComponentModel
Imports System.Web.UI

<DefaultProperty("Text"), ToolboxData("<{0}:numbereditor runat=server></{0}:numbereditor>")> Public Class NumberEditor
    Inherits System.Web.UI.WebControls.TextBox
    REM 声明javascript 函数 唯一  多次试用只输出一个javascirpt function
    Private Const SCP_NUMBER_ONLYSCRIPT_ID As String = "{31E7D9A24-82DB-5AF3-DADE-7D0B782C-23A43}"
    REM javascript 函数
    Private Const SCP_NUMBER_ONLY_SCRIPT As String = "<Script language=""Javascript"" >" + vbCrLf + "function numbereditor_keypress(e) " + vbCrLf + "{" + vbCrLf + "var newkeypress=event.keyCode;" + vbCrLf + " if(newkeypress==13)" + vbCrLf + "return true;" + vbCrLf + "if(newkeypress<48 || newkeypress>57)" + vbCrLf + "return false;" + vbCrLf + "else" + vbCrLf + "return true;" + vbCrLf + "}" + vbCrLf + "</script>"  

    Private Const SCP_NUMBER_ONLY_HOOK As String = "return numbereditor_keypress(this);"  ’后面的onkeypress调用,可以后面直接试用不声明.:)

    Dim _text As integer=0 '默认值,当text值为数字时,初始化值需要.
    Private _Length As Integer = 18  '设置这个的目的是 改变默认的长度最大值,呵呵不弄也可以.
#Region "重写text属性,把所有的非数字的赋值,全部转化为数字型.tostring"
    <Bindable(False), Category("Appearance"), DefaultValue(0)> Shadow Property [Text]() As integer
        Get     
            Return _text
        End Get

        Set(ByVal Value As integer)
            Try
                _text = value
                  '先转化为double再转化为int,直接转化遇到字母等会产生exception
            Catch
                _text = 0
            End Try

        End Set
    End Property
#end region
#Region  "重写最大长度--去掉也可"
    <Bindable(False), Category("Appearance"), DefaultValue(20)> Overrides Property [MaxLength]() As Integer
        Get
            Return _Length
        End Get

        Set(ByVal Value As Integer)
            Try
                _Length = Value
            Catch
                _Length = 18
            End Try
        End Set
    End Property
#end region
#region "Javascript代码的输出,并保证当页面多个该控件时,javascript funtion的唯一性"
    Private Sub outputJavascript()
        If (Not Page.IsClientScriptBlockRegistered(SCP_NUMBER_ONLYSCRIPT_ID)) Then
            REM 强制ID为整个控件的ID
            Me.Page.RegisterClientScriptBlock(SCP_NUMBER_ONLYSCRIPT_ID, SCP_NUMBER_ONLY_SCRIPT)
        End If
    End Sub
#end region
    Protected Overrides Sub AddAttributesToRender(ByVal writer As HtmlTextWriter)
        MyBase.AddAttributesToRender(writer)
        writer.AddAttribute("OnKeyPress", Me.SCP_NUMBER_ONLY_HOOK)  
'输出 增加attribute  
    End Sub
    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
        MyBase.OnPreRender(e)
        outputJavascript() '输出前确定javascript function 的输出
    End Sub

End Class

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值