写了一个自定义验证控件,不足之处希望大家指出

一个文本框,可通过设置属性来对输入进行验证,

但是我不知道怎么能在使用的时候用鼠标设置文本框的大小?

还有RequiredFieldValidator 和RegularExpressionValidator   一起使用时,提示错误信息问题----

就是RegularExpressionValidator的错误提示前面有空白----RequiredFieldValidator的提示所占的长度。

怎么去掉啊?

 

 

  [DefaultProperty("NullAble")]
    [ToolboxData("<{0}:ValidateText runat=server></{0}:ValidateText>")]
    public class ValidateText : CompositeControl
    {
        private TextBox tb;
        private RequiredFieldValidator rfv;
        private RegularExpressionValidator rev;
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        public string Text
        {
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }
        [Category("ValidateTextBox")]
        [Description("文本框显示文本")]
        public string Value
        {
            get
            {
                 this.EnsureChildControls();
                 return tb.Text;
            }
            set
            {
                this.EnsureChildControls();
                tb.Text = value;
            }
        }

        private string _ValidateType;
        [Category("ValidateTextBox")]
        [Description("验证格式")]
        [TypeConverter(typeof(ValidateTypeCollection))]
        public string ValidateType
        {
            get
            {
                return _ValidateType;
            }
            set
            {
                _ValidateType = value;
                switch (_ValidateType)
                {
                    case "Number":
                        this.ValidateExpression = "^[0-9]*$"; break;
                    case"EMail":
                        this.ValidateExpression = @"^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$"; break;
                    case"Phone":
                        this.ValidateExpression = @"/d{3}[-,/s]/d{8}|/d{4}[-,/s]/d{7}|/d{8}|/d{7}|d{11}"; break;
                    case"MobilePhone":
                        this.ValidateExpression = @"^/s0?1[3,5]/d/d{8}/S$"; break;
                    case"DateTime":
                        this.ValidateExpression = @"^/d{4}[/-///s]?((((0[13578])(1[02]))[/-///s]?(([0-2][0-9])(3[01])))(((0[469])(11))[/-///s]?(([0-2][0-9])(30)))(02[/-///s]?[0-2][0-9]))$"; break;
                 }
              
            }
        }
        private Unit unitTextBoxWidth = Unit.Empty;
        [Category("ValidateTextBox")]
        [Description("文本框宽度")]
        public Unit TextBoxWidth
        {
            get
            {
                this.EnsureChildControls();
                return this.tb.Width;
            }
            set
            {
                this.EnsureChildControls();
                this.tb.Width = value;
            }
        }

        private Unit unitTextBoxHeight = Unit.Empty;
        [Category("ValidateTextBox")]
        [Description("文本框高度度")]
        public Unit TextBoxHeight
        {
            get
            {
                this.EnsureChildControls();
                return this.tb.Height;
            }
            set
            {
                this.EnsureChildControls();
                this.tb.Height = value;
            }
        }

        private bool _NullAble = true;
        [Category("ValidateTextBox")]
        [Description("当输入为空时是否验证")]
        public bool NullAble
        {
            get
            {
                this.EnsureChildControls();
                return this._NullAble;
            }
            set
            {
                _NullAble = value;
            }
        }
        [Category("ValidateTextBox")]
        [Description("验证表达式")]
        public string ValidateExpression
        {
            get
            {
                this.EnsureChildControls();
                return this.rev.ValidationExpression;
            }
            set
            {
                this.EnsureChildControls();
                this.rev.ValidationExpression = value;
            }
        }
        [Category("ValidateTextBox")]
        [Description("输入格式错误提示")]
        public string NullErrorMessage
        {
            get
            {
                this.EnsureChildControls();
                return this.rfv.ErrorMessage;
            }
            set
            {
                this.EnsureChildControls();
                this.rfv.ErrorMessage = value;
            }
        }
        [Category("ValidateTextBox")]
        [Description("输入格式错误提示")]
        public string ValidateTypeErrorMessage
        {
            get
            {
                this.EnsureChildControls();
                return this.rev.ErrorMessage;
            }
            set
            {
                this.EnsureChildControls();
                this.rev.ErrorMessage = value;
            }
        }
    
        protected override void CreateChildControls()
        {
            this.Controls.Clear();
            this.tb = new TextBox();
            this.tb.ID = "tbValue";
            this.Controls.Add(tb);

            this.rev = new RegularExpressionValidator();
            this.rev.ID = "revValidator";
            this.rev.ControlToValidate = tb.ID;
            this.rev.ErrorMessage = "输入格式不正确!";
            this.rev.Display = ValidatorDisplay.Static;
            this.Controls.Add(rev);

            this.rfv = new RequiredFieldValidator();
            this.rfv.ID = "rfvValidator";
            this.rfv.ControlToValidate = tb.ID;
            this.rfv.ErrorMessage = "输入不能为空!";
            this.rfv.Display = ValidatorDisplay.Static;
            this.Controls.Add(rfv);

            base.CreateChildControls();
        }

       

        protected override void  RecreateChildControls()
        {
            if (this.ChildControlsCreated == false)
            {
                base.RecreateChildControls();
            }
        }
        protected override void Render(HtmlTextWriter writer)
        {
            writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
            writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
            writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");

            //writer.RenderBeginTag(HtmlTextWriterTag.Table);
            //writer.RenderBeginTag(HtmlTextWriterTag.Tr);
           // writer.RenderBeginTag(HtmlTextWriterTag.Td);
            this.tb.RenderControl(writer);
           // writer.RenderEndTag();
            if (this._NullAble == false)
            {
                // writer.RenderBeginTag(HtmlTextWriterTag.Td);
                writer.Write("<font color=#FF3300> * </font> ");

                this.rfv.RenderControl(writer);
                // writer.RenderEndTag();
            }
            if (!String.IsNullOrEmpty(this.ValidateExpression) && this.DesignMode == false)
            {
               // writer.RenderBeginTag(HtmlTextWriterTag.Td);
                this.rev.RenderControl(writer);
               // writer.RenderEndTag();
            }

          

            //writer.RenderEndTag();
            //writer.RenderEndTag();
            base.Render(writer);
        }
        protected override void RenderContents(HtmlTextWriter output)
        {
            output.Write(Text);
        }
        public class ValidateTypeCollection : StringConverter
        {
            public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
            {
                return true;
            }
            public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
            {
                return false;
            }
            public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
            {
                string[] strArray = new string[] {"Number","MobilePhone","Phone","EMail","DateTime" };
                StandardValuesCollection returnStandardValuesCollection = new StandardValuesCollection(strArray);
                return returnStandardValuesCollection;
            }
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值