关于继承扩展ASP.NET控件(以Textbox为例)

时间:2022-09-18 19:08:45

以下是一个相对简陋的扩展, 主要是针对金额显示的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为例)的更多相关文章

  1. asp&period;net控件开发基础&lpar;1&rpar;(转)原文更多内容

    asp.net本身提供了很多控件,提供给我们这些比较懒惰的人使用,我认为控件的作用就在此,因为我们不想重复工作,所以要创建它,这个本身便是一个需求的关系,所以学习控件开发很有意思. wrox网站上有本 ...

  2. Asp&period;Netserver控件开发的Grid实现&lpar;三&rpar;列编辑器

    以下是GridColumnsEditor的实现代码: GridColumnsEditor.cs using System; using System.Collections.Generic; usin ...

  3. 为ASP&period;NET控件加入快捷菜单

    ContextMenu Control 快捷菜单控件概述: MSDN Liabrary 中包含了几个DHTML快捷菜单的示例.分别提供了对这一功能的不能实现方法.一个快捷菜单就是在页面中任何位置的一组 ...

  4. Asp&period;Net控件的客户端命名

    我们在用ASP.NET写出来的网页,用浏览器来查看生成的客户端代码的时候经常看到这样的代码:GridView1_ctl101_WebUserControl1_webuserControlButton, ...

  5. asp&period;net &lt&semi;asp&colon;Content&gt&semi;控件

    <asp:Content ID="Content2" ContentPlaceHolderID="CPH_MainContent" runat=&quot ...

  6. FineUI 基于 ExtJS 的专业 ASP&period;NET 控件库

    FineUI 基于 ExtJS 的专业 ASP.NET 控件库 http://www.fineui.com/

  7. ASP&period;NET控件&lt&semi;ASP&colon;Button &sol;&gt&semi; html控件&lt&semi;input type&equals;&quot&semi;button&quot&semi;&gt&semi;区别联系

    ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样 ...

  8. asp&period;net控件的Hyperlink控件

    Asp.net控件: Hyperlink控件:Hyperlink控件又称为超链接控件,该控件在功能上跟Html的<a herf=””>控件相似,其显示的模式为超链接的形式. 注意: Hyp ...

  9. 把某个asp&period;net 控件 替换成 自定义的控件

    功能:可以把某个asp.net 控件 替换成 自定义的控件 pages 的 tagMapping 元素(ASP.NET 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. ...

随机推荐

  1. 在windows 下安装启动redis

    在windows环境下安装 redis这个需要在github中下载开源代码,https://github.com/mythz/redis-windows 下载最近的zip包然后 解压到任意一个盘符中进 ...

  2. hadoop安装计

    hadoop安装计 大体上按这个做就好了 http://blog.csdn.net/hitwengqi/article/details/8008203 需要修改hadoop-env.sh export ...

  3. mysql安装常见问题(系统找不到指定的文件、发生系统错误 1067 进程意外终止)

    在安装mysql时总是会遇到这样那样的问题,每次重新安装都会花很多时间来排查.在网上其实有很多相关的文章,但很多都只讲了方法,但没讲具体细节问题,导致无法解决问题.其实有时候知道问题的原因,但总是因为 ...

  4. tomcat端口修改以及jvm启动参数设置

    1.端口更改:找到config目录下server.xml文件 如下 <?xml version='1.0' encoding='utf-8'?> <!-- Licensed to t ...

  5. 布思算法——Java实现

    前面一篇提到二进制队列实现了 N位二进制的补码,那么我们来实现布思算法. 关于BinaryQueue:https://www.cnblogs.com/XT-xutao/p/10050518.html ...

  6. 洛谷 P2574 XOR的艺术&lpar;线段树 区间异或 区间求和&rpar;

    To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...

  7. 身份证号码 正则表达式 jquery

    现在的身份证为18位(最后一位可以是数字,可以是x,可以是X),老的身份证是15位(纯数字). 所以正则是: /(^\d{15}$)|(^\d{17}[\d|x|X]$)/ 扩展: 1 正则表达式的创 ...

  8. sqlserver的substring详细用法

    SQL 中的 substring 函数是用来截取一个栏位资料中的其中一部分. 例如,我们需要将字符串'abdcsef'中的‘abd’给提取出来,则可用substring 来实现: select sub ...

  9. CSS命名规范和规则

    一.命名规则 ).尽量不缩写,除非一看就明白的单词 二.class的命名 (1).red { color: red; } .f60 {color: #f60; } .ff8600{ color: #f ...

  10. STRIDE 和 DREAD

    目录 STRIDE 和 DREAD 背景 STRIDE DREAD 注释 STRIDE 和 DREAD 背景 STRIDE 和 DREAD 是最常用也是最好用的安全模型 STRIDE 主要负责对安全风 ...