以下是一个相对简陋的扩展, 主要是针对金额显示的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 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. ...
随机推荐
-
在windows 下安装启动redis
在windows环境下安装 redis这个需要在github中下载开源代码,https://github.com/mythz/redis-windows 下载最近的zip包然后 解压到任意一个盘符中进 ...
-
hadoop安装计
hadoop安装计 大体上按这个做就好了 http://blog.csdn.net/hitwengqi/article/details/8008203 需要修改hadoop-env.sh export ...
-
mysql安装常见问题(系统找不到指定的文件、发生系统错误 1067 进程意外终止)
在安装mysql时总是会遇到这样那样的问题,每次重新安装都会花很多时间来排查.在网上其实有很多相关的文章,但很多都只讲了方法,但没讲具体细节问题,导致无法解决问题.其实有时候知道问题的原因,但总是因为 ...
-
tomcat端口修改以及jvm启动参数设置
1.端口更改:找到config目录下server.xml文件 如下 <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to t ...
-
布思算法——Java实现
前面一篇提到二进制队列实现了 N位二进制的补码,那么我们来实现布思算法. 关于BinaryQueue:https://www.cnblogs.com/XT-xutao/p/10050518.html ...
-
洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...
-
身份证号码 正则表达式 jquery
现在的身份证为18位(最后一位可以是数字,可以是x,可以是X),老的身份证是15位(纯数字). 所以正则是: /(^\d{15}$)|(^\d{17}[\d|x|X]$)/ 扩展: 1 正则表达式的创 ...
-
sqlserver的substring详细用法
SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的‘abd’给提取出来,则可用substring 来实现: select sub ...
-
CSS命名规范和规则
一.命名规则 ).尽量不缩写,除非一看就明白的单词 二.class的命名 (1).red { color: red; } .f60 {color: #f60; } .ff8600{ color: #f ...
-
STRIDE 和 DREAD
目录 STRIDE 和 DREAD 背景 STRIDE DREAD 注释 STRIDE 和 DREAD 背景 STRIDE 和 DREAD 是最常用也是最好用的安全模型 STRIDE 主要负责对安全风 ...