天天看點

自動适應輸入内容高度的TextBox控件

原理和那個适應寬度的TextBox查不多,隻是這個反而更加簡單,因為在高度方向上增長不會破壞頁面的整體布局效果(寬度上的如果在頁内會擠走别的元素的),是以就不需要使用Agent

TextBox來作為實際錄入的容器了,直接把<TextArea>增高就行了。

    響應onpropertychange事件,同步内容和<TextArea>的高度。當然如果完全根據内容增高可能也會因為内容太多而變得難看,就設定了一個最大高度限制屬性。控件效果如下:

最大高度為200px的AutoTextBox Demo:

最大高度為200px但初始高度為3rows的AutoTextBox Demo:

高度增長無限制的AutoTextBox Demo:

    如果控件的MaxHeight屬性小于或等于0,那麼增長高度無限制。

自動适應輸入内容高度的TextBox控件

#region 附 AutoTextBox 控件源碼

自動适應輸入内容高度的TextBox控件

using System;

自動适應輸入内容高度的TextBox控件

using System.Web.UI;

自動适應輸入内容高度的TextBox控件

using System.Web.UI.WebControls;

自動适應輸入内容高度的TextBox控件

using System.ComponentModel;

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

namespace WebExcel.UI.WebControls

自動适應輸入内容高度的TextBox控件

{

自動适應輸入内容高度的TextBox控件

    /// <summary>

自動适應輸入内容高度的TextBox控件

    /// Summary description for AutoLengthTextBox.

自動适應輸入内容高度的TextBox控件

    /// </summary>

自動适應輸入内容高度的TextBox控件

    [DefaultProperty("Text"), 

自動适應輸入内容高度的TextBox控件

        ToolboxData("<{0}:AutoTextArea runat=server></{0}:AutoTextArea>")]

自動适應輸入内容高度的TextBox控件

    public class AutoTextArea : System.Web.UI.WebControls.TextBox

自動适應輸入内容高度的TextBox控件

    {

自動适應輸入内容高度的TextBox控件

        [DefaultValue(200)]

自動适應輸入内容高度的TextBox控件

        public int MaxHeight

自動适應輸入内容高度的TextBox控件

        {

自動适應輸入内容高度的TextBox控件

            get

自動适應輸入内容高度的TextBox控件

            {

自動适應輸入内容高度的TextBox控件

                object obj = ViewState["MaxHeight"];

自動适應輸入内容高度的TextBox控件

                return obj == null ? 200 : (int)obj;

自動适應輸入内容高度的TextBox控件

            }

自動适應輸入内容高度的TextBox控件

            set

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                ViewState["MaxHeight"] = value;

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

        }

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

        [DefaultValue(60)]

自動适應輸入内容高度的TextBox控件

        public int MinHeight

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                object obj = ViewState["MinHeight"];

自動适應輸入内容高度的TextBox控件

                return obj == null ? 60 : (int)obj;

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                ViewState["MinHeight"] = value;

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

        protected override void OnPreRender(EventArgs e)

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

            this.Attributes["minHeight"] = this.MinHeight.ToString();

自動适應輸入内容高度的TextBox控件

            if ( this.Height == Unit.Empty )

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                this.Height = this.MinHeight;

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

            else

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                this.Height = (int)Math.Max(this.MinHeight, this.Height.Value);

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

            base.OnPreRender (e);

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

        /// <summary> 

自動适應輸入内容高度的TextBox控件

        /// Render this control to the output parameter specified.

自動适應輸入内容高度的TextBox控件

        /// </summary>

自動适應輸入内容高度的TextBox控件

        /// <param name="output"> The HTML writer to write out to </param>

自動适應輸入内容高度的TextBox控件

        protected override void Render(HtmlTextWriter output)

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

            string strCode;

自動适應輸入内容高度的TextBox控件

            if ( this.MaxHeight <= 0 )

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                strCode = "this.style.height=Math.max(this.minHeight,this.scrollHeight)+(this.offsetHeight-this.clientHeight)";

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                strCode = "this.style.height=(this.scrollHeight>200)?200:Math.max(this.minHeight,this.scrollHeight)+(this.offsetHeight-this.clientHeight)";

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

            base.Attributes["onpropertychange"] = strCode;

自動适應輸入内容高度的TextBox控件

            // base.Attributes["onfocus"] = "this.height=this.height";

自動适應輸入内容高度的TextBox控件

            if ( base.Rows == 0 )

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

                base.Rows = 1;

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

            base.TextMode = TextBoxMode.MultiLine;

自動适應輸入内容高度的TextBox控件

            base.Render(output);

自動适應輸入内容高度的TextBox控件
自動适應輸入内容高度的TextBox控件

    }

自動适應輸入内容高度的TextBox控件

}

自動适應輸入内容高度的TextBox控件

#endregion

本文轉自部落格園鳥食軒的部落格,原文連結:http://www.cnblogs.com/birdshome/,如需轉載請自行聯系原部落客。

繼續閱讀