关于继承扩展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 设置架构) 定义一个标记类型的集合,这些标记类型在编译时重新映射为其他标记类型. ...
随机推荐
- input输入字母自动大小写转换
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- ToggleButton --------- 按钮实现开关效果
ToggleButton(开关按钮)是Android系统中比较简单的一个组件,是一个具有选中和未选择状态双状态的按钮,并且需要为不同的状态设置不同的显示文本 ,默认状态下 关. ToggleButto ...
- ASP.NET网站与ASP.NET应用程序的区别
我们使用VS做ASP.NET的时候,可以选择新建ASP.NET应用程序,同时也可以新建ASP.NET网站,两者有什么具体区别呢?今天真是很幸运,比别人多上了老师一节课,讲的是这两者之间的一些区别.我学 ...
- WCF之旅
转载:创建一个简单的WCF程序 http://www.cnblogs.com/artech/archive/2007/02/26/656901.html Endpoint Overview http ...
- Linux串口编程のtermios 结构
termios 结构是在POSIX规范中定义的标准接口,它类似于系统V中的termio接口,通过设置termios类型的数据结构中的值和使用一小 组函数调用,你就可以对终端接口进行控制. 可以被调整来 ...
- [转]CENTOS6 VNCSERVER安装
标签:vncservercentos6.0 ssh隧道 vncviewer centos 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...
- css基础-背景文本
css背景 1. background-color:#6495ed; 2. background-image:url('bgdesert.jpg'); 3. background-repeat:rep ...
- VS2015预览版中的C#6.0 新功能(三)
VS2015预览版中的C#6.0 新功能(一) VS2015预览版中的C#6.0 新功能(二) Using static 使用using StaticClass,你可以访问StaticClass类里的 ...
- Django 实战 之 搭项目(正在更新)
系统:win10 python版本:python 3.5 工具: pyCharm 3.4 professional 源码来源:https://github.com/ouzhigang/django-o ...
- HDU 5735 - Born Slippy
题意: 一棵 n 个节点的根树,i 节点权重 wi 对每一个节点s,找到这样一个长 m 的标号序列 v : 1. vi是vi-1 的祖先 2. f[s] = w[vi] + ∑(i=2, m) (w[ ...