聽說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);
        }

    }
}


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 momokao 的頭像
    momokao

    momokao

    momokao 發表在 痞客邦 留言(0) 人氣()