关于继承扩展ASP.NET控件(以Textbox为例)
以下是一个相对简陋的扩展, 主要是针对金额显示的Textbox扩展.
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.UI.WebControls;
- using System.ComponentModel;
- using System.Web.UI;
- using System.Text.RegularExpressions;
- [assembly: TagPrefix("XXX.Web.Controls", "XXX")]
- namespace XXX.Web.Controls
- {
- [ToolboxData("<{0}:DecimalTextbox runat=server></{0}:DecimalTextbox>")]
- [Designer(typeof(XXX.Web.Controls.DecimalTextbox))]
- public class DecimalTextbox : TextBox
- {
- protected override void OnInit(EventArgs e)
- {
- base.OnInit(e);
- }
- #region New properties
- private bool _IsRequired = false;
- [TypeConverter(typeof(BooleanConverter))]
- public bool IsRequired
- {
- get
- {
- if (ViewState[this.ID + "_IsRequired"] != null)
- {
- return (bool)ViewState[this.ID + "_IsRequired"];
- }
- else
- {
- ViewState[this.ID + "_IsRequired"] = this._IsRequired;
- return this._IsRequired;
- }
- }
- set
- {
- ViewState[this.ID + "_IsRequired"] = value;
- }
- }
- [TypeConverter(typeof(DecimalConverter))]
- public decimal Value
- {
- get
- {
- Regex reg = new Regex(this.ValidationExpression);
- if (reg.IsMatch(this.RawText))
- {
- return Convert.ToDecimal(base.Text.Replace(",", "").Replace("$", ""));
- }
- else
- {
- return ;
- }
- }
- }
- private string _ValidationExpression = @"^\$?-?[1-9]\d*$|^\$?-?0(\.\d+)$|^\$?-?[1-9]\d*(\.\d+)$|^\$?-?([1-9]{0,3},)(\d{3},)*(\d{3})(\.\d+)?$|^\$?-?0(\.\d+)?$|^\$?-?[1-9]\d{0,2}(\.\d+)?$";
- [TypeConverter(typeof(StringConverter))]
- public string ValidationExpression
- {
- get
- {
- if (ViewState[this.ID + "_ValidationExpression"] != null)
- {
- return (string)ViewState[this.ID + "_ValidationExpression"];
- }
- else
- {
- ViewState[this.ID + "_ValidationExpression"] = this._ValidationExpression;
- return this._ValidationExpression;
- }
- }
- set
- {
- ViewState[this.ID + "_ValidationExpression"] = value;
- }
- }
- private bool _IsNeedThousandSeparator = true;
- [TypeConverter(typeof(BooleanConverter))]
- public bool IsNeedThousandSeparator
- {
- get
- {
- if (ViewState[this.ID + "_IsNeedThousandSeparator"] != null)
- {
- return (bool)ViewState[this.ID + "_IsNeedThousandSeparator"];
- }
- else
- {
- ViewState[this.ID + "_IsNeedThousandSeparator"] = this._IsNeedThousandSeparator;
- return this._IsNeedThousandSeparator;
- }
- }
- set
- {
- ViewState[this.ID + "_IsNeedThousandSeparator"] = value;
- }
- }
- private int _DecimalPlaces = ;
- [TypeConverter(typeof(Int32Converter))]
- public int DecimalPlaces
- {
- get
- {
- if (ViewState[this.ID + "_DecimalPlaces"] != null)
- {
- return (int)ViewState[this.ID + "_DecimalPlaces"];
- }
- else
- {
- ViewState[this.ID + "_DecimalPlaces"] = this._DecimalPlaces;
- return this._DecimalPlaces;
- }
- }
- set
- {
- ViewState[this.ID + "_DecimalPlaces"] = value;
- }
- }
- private bool _IsNeedDollarSignal = false;
- [TypeConverter(typeof(BooleanConverter))]
- public bool IsNeedDollarSignal
- {
- get
- {
- if (ViewState[this.ID + "_IsNeedDollarSignal"] != null)
- {
- return (bool)ViewState[this.ID + "_IsNeedDollarSignal"];
- }
- else
- {
- ViewState[this.ID + "_IsNeedDollarSignal"] = this._IsNeedDollarSignal;
- return this._IsNeedDollarSignal;
- }
- }
- set
- {
- ViewState[this.ID + "_IsNeedDollarSignal"] = value;
- }
- }
- private string _DollarSignal = "$";
- [TypeConverter(typeof(StringConverter))]
- public string DollarSignal
- {
- get
- {
- if (ViewState[this.ID + "_DollarSignal"] != null)
- {
- return (string)ViewState[this.ID + "_DollarSignal"];
- }
- else
- {
- ViewState[this.ID + "_DollarSignal"] = this._DollarSignal;
- return this._DollarSignal;
- }
- }
- set
- {
- ViewState[this.ID + "_DollarSignal"] = value;
- }
- }
- private string FormatString
- {
- get
- {
- string pre = string.Empty;
- if (this.IsNeedDollarSignal)
- {
- pre += this.DollarSignal;
- }
- if (this.IsNeedThousandSeparator)
- {
- pre += "#,###";
- }
- else
- {
- pre += "#";
- }
- if (this.DecimalPlaces > )
- {
- pre += ".";
- for (int i = ; i < this.DecimalPlaces; i++)
- {
- pre += "#";
- }
- pre += "";
- }
- return pre;
- }
- }
- private string _RawText = string.Empty;
- public string RawText
- {
- get
- {
- if (ViewState[this.ID + "_RawText"] != null)
- {
- return (string)ViewState[this.ID + "_RawText"];
- }
- else
- {
- ViewState[this.ID + "_RawText"] = this._RawText;
- return this._RawText;
- }
- }
- private set
- {
- ViewState[this.ID + "_RawText"] = value;
- }
- }
- #endregion
- #region Override properties
- public override string SkinID
- {
- get
- {
- if (this.IsRequired)
- {
- return "DecimalRequired";
- }
- else
- {
- return "Decimal";
- }
- }
- set
- {
- base.SkinID = value;
- }
- }
- public override string Text
- {
- get
- {
- return ToDecimalFormatString(base.Text);
- }
- set
- {
- this.RawText = value;
- base.Text = ToDecimalString(value);
- }
- }
- #endregion
- #region New functions
- protected string ToDecimalString(string orignal)
- {
- Regex reg = new Regex(this.ValidationExpression);
- if (reg.IsMatch(orignal))
- {
- return orignal.Replace(",", "").Replace("$", "");
- }
- else
- {
- return string.Empty;
- }
- }
- protected string ToDecimalFormatString(string orignal)
- {
- if (!string.IsNullOrEmpty(orignal))
- {
- return this.Value.ToString(FormatString);
- }
- return orignal;
- }
- #endregion
- }
- }
有一下几个自定义属性可以设置:
IsRequired="True" 是否必填, 我这里只是控制SkinID.
IsNeedThousandSeparator="True" 这里是控制是否显示千位符
DecimalPlaces="2" 这里是控制小数位数
IsNeedDollarSignal="False" 这里是控制是否显示$符号
求助:
ASP.NET自带的控件, 用Toolbox拖入, 某些属性例如"Text"会显示在插入的控件页面代码上
若我现在有一个自定义的属性想在拖入页面的时候, 就在页面代码上就出现(包括默认值). 不知道如何实现, 希望高人指点.
backup:
//writer.AddAttribute("IsRequired", this.IsRequired.ToString());
//writer.AddAttribute("SkinID", this.SkinID.ToString());
//[DescriptionAttribute("一个基于 Textbox 的对Decimal特殊处理的派生控件")]
//[ParseChildren(false)]
//[PersistChildren(true)]
//[DefaultProperty("Value")]
//[DefaultValue(false)]
//[Description("是否必填, 将出现必填样式")]
//[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
//[PersistenceMode(PersistenceMode.InnerProperty)]
关于继承扩展ASP.NET控件(以Textbox为例)的更多相关文章
- asp.net控件开发基础(1)(转)原文更多内容
asp.net本身提供了很多控件,提供给我们这些比较懒惰的人使用,我认为控件的作用就在此,因为我们不想重复工作,所以要创建它,这个本身便是一个需求的关系,所以学习控件开发很有意思. wrox网站上有本 ...
- Asp.Netserver控件开发的Grid实现(三)列编辑器
以下是GridColumnsEditor的实现代码: GridColumnsEditor.cs using System; using System.Collections.Generic; usin ...
- 为ASP.NET控件加入快捷菜单
ContextMenu Control 快捷菜单控件概述: MSDN Liabrary 中包含了几个DHTML快捷菜单的示例.分别提供了对这一功能的不能实现方法.一个快捷菜单就是在页面中任何位置的一组 ...
- Asp.Net控件的客户端命名
我们在用ASP.NET写出来的网页,用浏览器来查看生成的客户端代码的时候经常看到这样的代码:GridView1_ctl101_WebUserControl1_webuserControlButton, ...
- asp.net <asp:Content>控件
<asp:Content ID="Content2" ContentPlaceHolderID="CPH_MainContent" runat=" ...
- FineUI 基于 ExtJS 的专业 ASP.NET 控件库
FineUI 基于 ExtJS 的专业 ASP.NET 控件库 http://www.fineui.com/
- ASP.NET控件<ASP:Button /> html控件<input type="button">区别联系
ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样 ...
- asp.net控件的Hyperlink控件
Asp.net控件: Hyperlink控件:Hyperlink控件又称为超链接控件,该控件在功能上跟Html的<a herf=””>控件相似,其显示的模式为超链接的形式. 注意: Hyp ...
- 把某个asp.net 控件 替换成 自定义的控件
功能:可以把某个asp.net 控件 替换成 自定义的控件 pages 的 tagMapping 元素(ASP.NET 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. ...
随机推荐
- [置顶] 创建GitHub技术博客全攻略
[置顶] 创建GitHub技术博客全攻略 分类: GitHub2014-07-12 13:10 19710人阅读 评论(21) 收藏 举报 githubio技术博客网站生成 说明: 首先,你需要注册一 ...
- C#几种截取字符串的方法小结 (摘抄)
1.根据单个分隔字符用split截取 例如 string st="GT123_1"; string[] sArray=st.split("_"); 即可得到sA ...
- css-下拉菜单案例
<!DOCTYPE html>CSS4-布局2-display下拉菜单案例 <style>.xiala{width:200px;background:#ddd;}.xiala ...
- jquery在火狐浏览中上传图片并显示
由于火狐浏览器有很多代码无法兼容,特别是图片的显示,下面我介绍一种是我亲自测试过可以实现的方法 <script> function setImagePreview() { //var ix ...
- 转: 向tabControl中添加一个Form(C#)
- 值栈和OGNL 之 7.1 值栈
7.1 值栈 7.1.1 值栈是什么 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Resu ...
- java 读取并且显示 txt 文件
系统:mac os x 10.9 eclipse 在eclipse 中建立一个project, 命名为Cin_txt, Cin_txt的内容 test wang hello world 以下是输入的代 ...
- How to Use Javascript to Control Quicktime
参看下面链接: How to Use Javascript to Control Quicktime;
- No1_2. 流程控制_java学习笔记
import java.util.Scanner; import java.lang.Math; public class HelloForWhile { /** * 文档注释,程序名称:HelloF ...
- sshfs远程文件系统挂载
注意:转载请注明出处: http://www.programfish.com/blog/?p=145 sshfs简介: 一种通过SSH协议访问远程文件系统的用户空间文件系统.可以把远程主机上的文件系统 ...