TextBox 控件剖析[附源码]

翻译|其它|编辑:郝浩|2007-08-13 11:47:29.000|阅读 865 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

下面是一张 TextBox 控件的图片:

         开发动机:早在上一家公司,就有了这个控件的开发想法并设计了一个简单原型。在加
Discuz 之后,因要在后台管理设计用使用客 JS ,因此就在原有的代基本上行了相
充,添加了如正规订制,最大度限制等功能。前的这个1.0版本中的源
        
们这个的人应该很容易看出这个控件是采用控件合方式完成的。里面的几
件定如下:

System.Web.UI.WebControls.TextBox tb=new System.Web.UI.WebControls.TextBox(); 
System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator1=new RequiredFieldValidator();
System.Web.UI.WebControls.RegularExpressionValidator RegularExpressionValidator1=new RegularExpressionValidator();
System.Web.UI.WebControls.RangeValidator rangevalidator=new System.Web.UI.WebControls.RangeValidator();


        
其中的 tb 就是这个控件的主角,客端所呈的文件框就是, RequiredFieldValidator1
是否强制容的控件( tb 定),而 RegularExpressionValidator1 式或
定制的正行初始化并与 tb 定和控制的控件。Rangevalidator 行范限制的控件。

         它们绑定的函就是 SetValiateControls()现说明如下:

 1 SetValiateControls()
 2 {
 3      
 4     this.Controls.Add(tb);  
向自定控件中加入tb(TextBox)控件
 5         
 6     //有要行正
 7  if((RequiredFieldType!=null)&&(RequiredFieldType!="")&&(RequiredFieldType!="无校"))
 8   {
 9         //示信息方式 "Dynamic"
10   RegularExpressionValidator1.Display=System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
11   //textboxRegularExpressionValidator1控件相
12   RegularExpressionValidator1.ControlToValidate=tb.ID;
13   //根据校验类型加的正
14   switch (RequiredFieldType)
15    {
16    case "据校":
17     {
18        //如有用定制的正使用,如使用系的正
19        RegularExpressionValidator1.ValidationExpression=(this.ValidationExpression!=null)?
20        this.ValidationExpression:"^[-]?\\d+[.]?\\d*$";
21        //错误信息
22        RegularExpressionValidator1.ErrorMessage="字的格式不正确";break
23    }
24    
25   
26   //是否可以不容的判
27   switch (CanBeNull)
28    {
29    case "":  break;  }
30    case "":
31     {
32        //填时则进 RequiredFieldValidator1置和 tb
33        RequiredFieldValidator1.Display=System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
34        RequiredFieldValidator1.ControlToValidate=tb.ID;
35        RequiredFieldValidator1.ErrorMessage="<font color=red>请务!</font>";
36        this.Controls.Add(RequiredFieldValidator1);
37        break
38    }
39    default :  break;  }
40   }
41   
42     }
43     
44

    
        
下面依次明其主要性和功能:

  1 SetFocusButtonID 性用户当 tb 控件中入回应获得焦点的控件 ID(一般是提交 ID ),
  2 如下:
  3     [Bindable(true),Category("Appearance"),DefaultValue("")] 
  4  public string SetFocusButtonID
  5   {
  6      get
  7       {
  8    object o = ViewState[this.ClientID+"_SetFocusButtonID"];
  9    return (o==null)?"":o.ToString(); 
 10      }
 11   set
 12    {
 13    ViewState[this.ClientID+"_SetFocusButtonID"] = value;
 14    if(value!="")
 15     {
 16     tb.Attributes.Add("onkeydown","if(event.keyCode==13){
 17      document.getElementById('"+value+"').focus();}");
 18    }
 19   }
 20  }   
 21  
 22  
 23     // tb 控件容最大性,注当为多行“MultiLink”(即:textarea)使用 JS 得到该属度的检查
 24     [Bindable(true),Category("Appearance"),DefaultValue("")] 
 25     public int MaxLength
 26      {   
 27  get 
 28  
 29   object o =ViewState["TextBox_MaxLength"]; 
 30   if(o!=null)
 31    {
 32    int maxlength= Convert.ToInt32(o.ToString()); 
 33    AddAttributes("maxlength",maxlength.ToString());
 34    return  maxlength;
 35   }
 36   else
 37    {
 38    return -1;
 39   }
 40  } 
 41  set 
 42  
 43   ViewState["TextBox_MaxLength"] = value; 
 44   AddAttributes("maxlength",value.ToString());
 45  } 
 46    }
 47  
 48  
 49    //控件的 TextMode ,用于定制示模式行或多行
 50    [Bindable(false),Category("Behavior"),DefaultValue(""),TypeConverter(
 51   typeof(TextModeFieldTypeControlsConverter)),Description("滚动象。")] 
 52    public string TextMode  
 53    
 54  get
 55   {
 56   return tb.TextMode.ToString();
 57  }
 58  set
 59   {
 60   if (value=="Password")     tb.TextMode =TextBoxMode.Password;
 61   if (value=="MultiLine") 
 62    {
 63    tb.TextMode =TextBoxMode.MultiLine;
 64    tb.Attributes.Add("onkeyup","return isMaxLen(this)");
 65   }
 66   if (value=="SingleLine")   tb.TextMode =TextBoxMode.SingleLine;
 67  }
 68    }
 69  
 70    //置校验类初始化控件
 71    [Bindable(false),Category("Behavior"),DefaultValue(""),TypeConverter(typeof(
 72    RequiredFieldTypeControlsConverter)),Description("滚动象。")] 
 73    public string RequiredFieldType  //行校的表
 74    
 75  get 
 76  
 77   object o =  ViewState["RequiredFieldType"]; 
 78     return (o==null)?"":o.ToString(); 
 79  } 
 80  set 
 81  
 82   ViewState["RequiredFieldType"] = value; 
 83   //初始化控件,码调用先后逻辑还存在一些问题,已在2.0版本做相修正。
 84   SetValiateControls(); 
 85  } 
 86    } 
 87  
 88     .
 89  
 90  
 91    //采用下拉框示方式来显示校验类型,如
 92    public class RequiredFieldTypeControlsConverter:StringConverter
 93     {
 94  public RequiredFieldTypeControlsConverter()  {}
 95
 96  public override bool GetStandardValuesSupported(ITypeDescriptorContext context) 
 97  
 98   return true
 99  } 
100
101  public override System.ComponentModel.TypeConverter.StandardValuesCollection GetStandardValues(
102    ITypeDescriptorContext context) 
103  
104   ArrayList controlsArray = new ArrayList(); 
105   controlsArray.Add("无校"); 
106   controlsArray.Add("据校");
107   controlsArray.Add("");
108   controlsArray.Add("手机"); 
109   controlsArray.Add("家用电话"); 
110   controlsArray.Add("份证号码"); 
111   controlsArray.Add("网页地址"); 
112   controlsArray.Add("日期"); 
113   controlsArray.Add("日期时间"); 
114   controlsArray.Add(""); 
115   controlsArray.Add("IP地址"); 
116   controlsArray.Add("IP地址端口"); 
117   return new StandardValuesCollection(controlsArray); 
118        } 
119   
120  public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) 
121  
122   return false
123  } 
124    }
125    
126  
127
128

        

        

        
这样就完成了这个控件的主干部分,而其的一些性,如 MaximumValue (最大),MinimumValue(最小
验时有效。而 Text 性中的日期格式强制转换主要了避免不同言操作系日期格式不同才这样操作的。
 
        
存在的问题firefox 下的校js无法使用。
        
程序逻辑结构还有待化。
        
选项中出中文,据校箱等(以后采用英文)

         如果 ie js 无法使用可” - “” -- “cmd” 然后
        C:/windows/Microsoft.Net/Framework/v1.1.4322/aspnet_regiis -c 
即可


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com

文章转载自:csdn

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP