聽說Window.Form可以在TextBox輸入數字時,每3位數加上一個逗號,但是Web Form沒這功能,首先想到的是用javascript將它實現,成功的寫出javascript後想到,如果能夠將這功能做成一個元件,就不用每次都要自己去加javascript,找了網路上各家資料,終於搞定這需求
首先新增專案 -> Visual c# -> Windows -> Web Control Library ->,產生一個專案後,Visual Studio會自動產生一支cs,將它改名為TextBoxFormat.cs
看到此cs內容,有一個ToolboxData的設定,那就是在引用控制項時,aspx會出現的tag內容
[ToolboxData("<{0}:TextBoxFormat runat=server></{0}:TextBoxFormat>")]在aspx裡出現
<cc1:TextBoxFormat ID="iTxtTotalAmount" runat="server" Width="80px"></cc1:TextBoxFormat>
此class必須繼續TextBox,就可以使用TextBox所有屬性及方法,我只要增加一個Method去做加逗號的動作就可以了
Mehot - EnableAddCommas是在aspx引用時,設定是否要使用增加逗號功能的,Method上面沒加那4行設定的話,aspx就不使用此參數了
Method - AddCommons()就是主角啦~我是將寫好的javascript由這裡來做註冊到網頁的動作,並且加上一個Attribute,告訴它是在OnKeyUp時,觸發javascript method,由於有判斷頁面上此javascript method是否被註冊過,所以不用擔心引用兩個以上的控制項時,會有兩個以上的javascript出現而發生衝突
Method - OnInit就是此控制項被引用時的一些init動作
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace CustomerControl
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:TextBoxFormat runat=server></{0}:TextBoxFormat>")]
public class TextBoxFormat : TextBox
{
private bool m_enableAddCommas = true;
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public bool EnableAddCommas
{
get { return m_enableAddCommas; }
set { m_enableAddCommas = value; }
}
/// <summary>
/// 數字每3位加上","
/// </summary>
protected void AddCommons()
{
if (!Page.ClientScript.IsStartupScriptRegistered("addCommas"))
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("<script language='JavaScript' type='text/javascript'>");
sb.AppendLine("function addCommas(obj){");
sb.AppendLine(" x = obj.value.split('.');");
sb.AppendLine(" x1 = x[0];");
sb.AppendLine(" var rgx = /,/g;");
sb.AppendLine(" x1 = x1.replace(rgx, \"\");");
sb.AppendLine(" x2 = x.length > 1 ? '.' + x[1] : '';");
sb.AppendLine(" rgx = /(\\d+)(\\d{3})/;");
sb.AppendLine(" while (rgx.test(x1)) {");
sb.AppendLine(" x1 = x1.replace(rgx, '$1' + ',' + '$2');");
sb.AppendLine(" }");
sb.AppendLine(" obj.value = x1 + x2;");
sb.AppendLine("}");
sb.AppendLine("</script>");
Page.ClientScript.RegisterStartupScript(typeof(String), "addCommas", sb.ToString());
}
base.Attributes.Add("OnKeyUp", "addCommas(this)");
}
protected override void OnInit(EventArgs e)
{
if (m_enableAddCommas)
{
AddCommons();
}
base.OnInit(e);
}
}
}
- May 16 Fri 2008 15:49
自訂控制項 - TextBox在輸入時,遇上數字每3位數加上一個逗號
全站熱搜
留言列表