一步一步教你打造一个Numeric TextBox控件

本文来源:http://www.cnblogs.com/zhuqil/archive/2010/01/09/1642688.html

 

1、创建一个新的类库目,将它命名为MyCustomControls

一步一步教你打造一个Numeric TextBox控件_第1张图片

 

2、 添加System.Web引用:

一步一步教你打造一个Numeric TextBox控件_第2张图片

 

3、 Visual Studio 将会自动添加一个名字为"Class1.cs"的文件。请将它删除,然后添加NumericTextBox.cs 和NumericTextBoxExtention.cs两个文件类。另外创建一个名字为"Resources" 新的文件夹,在这个文件夹中添加一个名字为"NumericTextBox.js"的JavaScript文件:

一步一步教你打造一个Numeric TextBox控件_第3张图片

 

4、为了使JavaScript嵌入在组件中,改变其生成操作属性为"嵌入的资源",请参阅下图:

一步一步教你打造一个Numeric TextBox控件_第4张图片 

5、两个类库文件都用来实现NumericTextBox类,它们之间使用了关键字partial, NumericTextBox.cs 用来实现控件的逻辑,NumericTextBoxExtention.cs 将包含所有的字段和属性。

  NumericTextBox.cs:

代码
using  System;
using  System.Web.UI;

[assembly: WebResource(
" MyCustomControls.Resources.NumericTextBox.js " " text/javascript " )]
namespace  MyCustomControls
{
    [ToolboxData(
@" <{0}:NumericTextBox Text="""" runat=""server"" ></{0}:NumericTextBox> " )]
    
public   partial   class  NumericTextBox : System.Web.UI.WebControls.TextBox
    {
        
protected   override   void  OnPreRender(EventArgs e)
        {
            
base .OnPreRender(e);

            ClientScriptManager scriptManager 
=   this .Page.ClientScript;
            
string  resourceFilePath  =   " MyCustomControls.Resources.NumericTextBox.js " ;

            
//  This will register a Javascript block witht the name 'NumericTextBoxScript'
            scriptManager.RegisterClientScriptInclude( " NumericTextBoxScript " , scriptManager.GetWebResourceUrl( this .GetType(), resourceFilePath));

            
if  ( this .Type  ==  TextBoxType.Decimal)
                
this .Attributes.Add( " onkeydown " string .Format( " return CheckDecimal(this,'{0}','{1}', {2}) " , NumberOfInteger, NumberOfFraction, _AllowNegative.ToString().ToLower()));
            
else   if  ( this .Type  ==  TextBoxType.Integer)
                
this .Attributes.Add( " onkeydown " string .Format( " return CheckInteger({0}) " , _AllowNegative.ToString().ToLower()));

            
this .Attributes.Add( " onkeyup " string .Format( " return CheckNegative(this) " , _AllowNegative.ToString().ToLower()));
        }
    }
}

  NumericTextBoxExtention.cs

代码
namespace  MyCustomControls
{
    
public   partial   class  NumericTextBox : System.Web.UI.WebControls.TextBox
    {
        
public   enum  TextBoxType
        {
            Integer,
            Decimal
        }

        
private   int  _NumberOfFraction  =   0 ;
        
private   int  _NumberOfInteger  =   0 ;
        
private   bool  _AllowNegative  =   false ;
        
private  TextBoxType _Type  =  TextBoxType.Integer;

        
public   int  NumberOfFraction
        {
            
get  {  return  _NumberOfFraction; }
            
set  { _NumberOfFraction  =  value; }
        }

        
public   int  NumberOfInteger
        {
            
get  {  return  _NumberOfInteger; }
            
set  { _NumberOfInteger  =  value; }
        }

        
public   bool  AllowNegative
        {
            
get  {  return  _AllowNegative; }
            
set  { _AllowNegative  =  value; }
        }

        
public  TextBoxType Type
        {
            
get  {  return  _Type; }
            
set  { _Type  =  value; }
        }        
        
    }
}

 7、实现"NumericTextBox.js":

代码
//   CheckNegative
//that the dash/minus character is added to the left.
function  CheckNegative(sender) {
    
if  (event.keyCode  ==   189 ) {  //  dash (-)
         if  (sender.value.indexOf( ' - ' 0 >   0 )
            sender.value 
=  sender.value.replace( ' - ' '' );
    }
}

//
  CheckInteger
function  CheckInteger(allowNegative) {
    
     if  ((event.keyCode  >=   48   &&  event.keyCode  <=   57 ||   //  0-9 numbers
        (event.keyCode  >=   37   &&  event.keyCode  <=   40 ||   //  Left, Up, Right and Down
        event.keyCode  ==   8   ||   //  backspaceASKII
        event.keyCode  ==   9   ||   //  tabASKII
        event.keyCode  ==   16   ||   //  shift
        event.keyCode  ==   17   ||   //  control
        event.keyCode  ==   35   ||   //  End
        event.keyCode  ==   36   ||   //  Home
        event.keyCode  ==   46 //  deleteASKII
         return   true ;
    
else   if  (event.keyCode  ==   189   &&  allowNegative  ==   true ) {  //  dash (-)
         if  (sender.value.indexOf( ' - ' 0 >   - 1 )
            
return   false ;
        
else
            
return   true ;
    }
    
else
        
return   false ;
}

//
  CheckDecimal
function  CheckDecimal(sender, numberOfInteger, numberOfFrac, allowNegative) {
    
var  valueArr;

    
if  ((event.keyCode  >=   37   &&  event.keyCode  <=   40 ||   //  Left, Up, Right and Down
        event.keyCode  ==   8   ||   //  backspaceASKII
        event.keyCode  ==   9   ||   //  tabASKII
        event.keyCode  ==   16   ||   //  shift
        event.keyCode  ==   17   ||   //  control
        event.keyCode  ==   35   ||   //  End
        event.keyCode  ==   36   ||   //  Home
        event.keyCode  ==   46 //  deleteASKII
         return   true ;
    
else   if  (event.keyCode  ==   189   &&  allowNegative  ==   true ) {  //  dash (-)
         if  (sender.value.indexOf( ' - ' 0 >   - 1 )
            
return   false ;
        
else
            
return   true ;
    }

    valueArr 
=  sender.value.split( ' . ' );

    

    
if  (event.keyCode  ==   190 ) {  //  decimal point (.)
         if  (valueArr[ 0 !=   null   &&  valueArr[ 1 ==   null )
            
return   true ;
        
else
            
return   false ;
    }

    
if  (event.keyCode  >=   48   &&  event.keyCode  <=   57 ) {  //  0-9 numbers
         if  (valueArr[ 1 ==   null ) {
            
if  (valueArr[ 0 ].indexOf( ' - ' 0 >   - 1 )
                numberOfInteger
++ ;

            
if  (valueArr[ 0 ].length  <=  numberOfInteger)
                
return   true ;
        }
        
else  {
            
if  (valueArr[ 1 ].length  <=  numberOfFrac)
                
return   true ;
        }
    }

    
return   false ;
}

 8、新建一个ASP.NET Web应用程序,在引用->添加引用->项目,选择MyCustomControls。在webconfig中添加下面配置代码:

< pages >
   
< controls >
      
< add  tagPrefix ="mcc"  namespace ="MyCustomControls"  assembly ="MyCustomControls" />

 9、在Defaut.aspx页面中拖入一个NumeriTextBox控件,如下图:

一步一步教你打造一个Numeric TextBox控件_第5张图片

参考代码:/Files/zhuqil/MyCustomControls.rar

 

你可能感兴趣的:(text)