重写的支持多验证TextBox控件
开发的时候,TextBox是个不得不用,又经常用的东西,经常会遇上是否允许空,数据类型的判断等等,用脚本吧,麻烦;用验证控件吧,也麻烦。自己写了一个,使用的时候选择下属性就OK了,还支持自定义正则表达式验证。以此作为在此的开门之笔吧:)
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Text.RegularExpressions;
namespace rungoo.WebCtrlLib
{
     /**//// <summary>
     /// 重写的TextBox控件
     /// Author: nowind
     /// Date: 2006-5-9
     /// Email:
hgh113@sina.com
     /// QQ:   87505959
     /// <summary>
     ///
     枚举数据#region 枚举数据
     /**//// <summary>
     /// 验证数据类型
     /// </summary>
     public enum DataType
     {
         Never,      //不验证
         String,      //字符串
         Int,      //整数
         IntPostive,     //大于0的整数
         IntZeroPostive,    //大于等于0的整数
         Float,      //数字
         FloatPostive,    //大于0的数字
         FloatZeroPostive,   //大于等于0的数字
         Url,
         Mail,
         //ChineseChars,    //汉字
         EnglishChars,    //英文
         EngNum,      //英文和数字
         EngNumUnerline,    //英文、数字和下划线
         PhoneNumber,    //电话号码
         MobileNumber,    //手机号码
         PostalCode,     //邮政编码
         Custom
     }
     #endregion
     /**//// Attribute DefaultProperty指定组件的默认属性,ToolboxData指定当从IDE工具中的工具箱中拖动自定义控件时为它生成的默认标记
     [DefaultProperty("AllowEmpty"), ToolboxData("<{0}:WebTextBox runat=server></{0}:WebTextBox>")]
     //类MyControl派生自WebControl
     public class WebTextBox : System.Web.UI.WebControls.TextBox
     {
         子控件#region 子控件
         //private System.Web.UI.WebControls.TextBox txtDataInput = new TextBox();
         private System.Web.UI.WebControls.RequiredFieldValidator rfvDataInput = new RequiredFieldValidator();
         private System.Web.UI.WebControls.RegularExpressionValidator revDataInput = new RegularExpressionValidator();
         private Panel pnlFrame = new Panel();     //承载其它控件的容器Panel控件
         #endregion
         private string error = "";
         控件自定义属性#region 控件自定义属性
         [Bindable(true)]
         [Category("自定义信息区")]
         [Browsable(true)]
         [Description("是否允许空值")]
         [DefaultValue("true")]
         public bool AllowEmpty
         {
             get { return ViewState["AllowEmpty"] == null ? true : (bool) ViewState["AllowEmpty"]; }
             set { ViewState["AllowEmpty"] = value; }
         }
         [Bindable(true)]
         [Category("自定义信息区")]
         [Browsable(true)]
         [Description("验证数据类型,默认为不验证")]
         [DefaultValue("IntPostive")]
         public DataType ValidType
         {
             get { return ViewState["ValidType"] == null ? DataType.Never : (DataType) ViewState["ValidType"]; }
             set { ViewState["ValidType"] = value; }
         }
         [Bindable(true)]
         [Browsable(true)]
         [Category("自定义信息区")]
         [Description("自定义验证错误信息")]
         [DefaultValue("")]
         public string ValidError
         {
             get { return ViewState["ValidError"] == null ? "" : (string) ViewState["ValidError"]; }
             set { ViewState["ValidError"] = value; }
         }
         [Bindable(true)]
         [Browsable(true)]
         [Category("自定义信息区")]
         [Description("自定义用于验证的正则表达式,ValidType 为 Custom 时有效")]
         [DefaultValue("")]
         public string ValidExpressionCustom
         {
             get { return ViewState["ValidExpressionCustom"] == null ? "" : (string) ViewState["ValidExpressionCustom"]; }
             set { ViewState["ValidExpressionCustom"] = value; }
         }
         [Bindable(true)]
         [Browsable(true)]
         [Category("自定义信息区")]
         [Description("错误信息提示的CSS类名")]
         [DefaultValue("")]
         public string CssError
         {
             get { return ViewState["CssError"] == null ? "" : (string) ViewState["CssError"]; }
             set { ViewState["CssError"] = value; }
         }
         #endregion
         构造函数#region 构造函数
         public WebTextBox() { }
         #endregion
         EnsureChildControls#region EnsureChildControls
         protected override void EnsureChildControls()
         {
             this.rfvDataInput.CssClass = this.CssError;
             this.rfvDataInput.ErrorMessage = "*输入不能为空";
             this.rfvDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
             this.rfvDataInput.EnableViewState = true;
             this.rfvDataInput.ControlToValidate = base.ID;
             this.revDataInput.CssClass = this.CssError;
             this.revDataInput.ErrorMessage = "*输入格式错误";
             this.revDataInput.Display = System.Web.UI.WebControls.ValidatorDisplay.Dynamic;
             this.revDataInput.EnableViewState = true;
             this.revDataInput.ControlToValidate = base.ID;
             //将子控件添加到此自定义控件中
             this.Controls.Add(rfvDataInput);
             this.Controls.Add(revDataInput);
             this.Controls.Add(pnlFrame);
         }
         #endregion
         /**//// <summary>
         /// 根据设置的验证数据类型返回不同的正则表达式样
         /// </summary>
         /// <returns></returns>
         GetRegex#region GetRegex
         private string GetValidRegex()
         {
             string regex = @"(\S)";
             switch (this.ValidType)
             {
             case DataType.Never:
                 break;
             case DataType.Int:
                 error = "*必须为整数";
                 regex = @"(-)?(\d+)";
                 break;
             case DataType.IntPostive:
                 error = "*必须为大于0的整数";
                 regex = @"([1-9]{1}\d*)";
                 break;
             case DataType.IntZeroPostive:
                 error = "*必须为不小于0的整数";
                 regex = @"(\d+)";
                 break;
             case DataType.Float:
                 error = "*必须为数字";
                 regex = @"(-)?(\d+)(((\.)(\d)+))?";
                 break;
             case DataType.FloatPostive:
                 error = "*必须为大于0的数字";
                 regex = @"(\d+)(((\.)(\d)+))?";
                 break;
             case DataType.FloatZeroPostive:
                 error = "*必须为不小于0的数字";
                 regex = @"(\d+)(((\.)(\d)+))?";
                 break;
             case DataType.Url:
                 error = "*URL格式错误";
                 regex = @"(
http://)?([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?";
                 break;
             case DataType.Mail:
                 error = "*EMail格式错误";
                 regex = @"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
                 break;
             //     case DataType.ChineseChars :
             //      error = "*包含中文字符";
             //      regex = @"[^\x00-\xff]";
             //      break;
             case DataType.EnglishChars:
                 error = "*只能输入英文字符";
                 regex = @"[a-zA-Z]*";
                 break;
             case DataType.EngNum:
                 error = "*只能输入英文字符和数字";
                 regex = @"[a-zA-Z0-9]*";
                 break;
             case DataType.EngNumUnerline:
                 error = "*只能输入英文字符、数字和下划线";
                 regex = @"[a-zA-Z0-9_]*";
                 break;
             case DataType.PhoneNumber:
                 error = "*电话号码格式错误";
                 regex = @"(86)?(-)?(0\d{2,3})?(-)?(\d{7,8})(-)?(\d{1,5})?";
                 break;
             case DataType.MobileNumber:
                 error = "*手机号码格式错误";
                 regex = @"(0)?(13)\d{9}";
                 break;
             case DataType.PostalCode:
                 error = "*邮编格式错误";
                 regex = @"\d{6}";
                 break;
             case DataType.Custom:
                 error = "*格式错误";
                 regex = this.ValidExpressionCustom;
                 break;
             default:
                 break;
             }
             if (this.ValidError.Trim() != "")
                 error = this.ValidError;
             return regex;
         }
         #endregion
         将此控件呈现给指定的输出参数#region 将此控件呈现给指定的输出参数
         /**//// <summary>
         /// 将此控件呈现给指定的输出参数。
         /// </summary>
         /// <param name="output"> 要写出到的 HTML 编写器 </param>
         protected override void Render(HtmlTextWriter output)
         {
             base.Render(output);
             output.Write("&nbsp;");
             if (!this.AllowEmpty)
             {
                 this.rfvDataInput.ID = "rfv" + base.ID;
                 this.rfvDataInput.ControlToValidate = base.ID;
                 this.rfvDataInput.RenderControl(output);
             }
             if (this.ValidType != DataType.Never && this.ValidType != DataType.String)
             {
                 this.revDataInput.ID = "rev" + base.ID;
                 this.revDataInput.ControlToValidate = base.ID;
                 this.revDataInput.ValidationExpression = this.GetValidRegex();
                 this.revDataInput.ErrorMessage = error;
                 this.revDataInput.RenderControl(output);
             }
         }
         #endregion
     }
}
posted on 2007-11-08 16:48  绿毛虫  阅读(399)  评论(0编辑  收藏  举报