自动适应输入内容高度的TextBox控件

简介:
关于Web开发上面UI布局的问题,我上次介绍了一个可以 自动适应输入内容宽度的TextBox控件,它可以解决在布局时预留控件大小和用户数入内容多少上的矛盾。但是由于那个控件被限制了只能做为单行输入使用:(,在输入大块文本时就力不从心了,那么就再做一个可自动适应高度的TextBox。

    原理和那个适应宽度的TextBox查不多,只是这个反而更加简单,因为在高度方向上增长不会破坏页面的整体布局效果(宽度上的如果在页内会挤走别的元素的),所以就不需要使用Agent TextBox来作为实际录入的容器了,直接把<TextArea>增高就行了。

    响应onpropertychange事件,同步内容和<TextArea>的高度。当然如果完全根据内容增高可能也会因为内容太多而变得难看,就设置了一个最大高度限制属性。控件效果如下:

   
最大高度为200px的AutoTextBox Demo:
最大高度为200px但初始高度为3rows的AutoTextBox Demo:
高度增长无限制的AutoTextBox Demo:
    如果控件的MaxHeight属性小于或等于0,那么增长高度无限制。

#region 附 AutoTextBox 控件源码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace WebExcel.UI.WebControls
{
     ///   <summary>
    
///  Summary description for AutoLengthTextBox.
    
///   </summary>
    [DefaultProperty("Text"), 
        ToolboxData("<{0}:AutoTextArea runat=server></{0}:AutoTextArea>")]
     public  class AutoTextArea : System.Web.UI.WebControls.TextBox
    {
        [DefaultValue(200)]
         public  int MaxHeight
        {
             get
            {
                 object obj = ViewState["MaxHeight"];
                 return obj ==  null ? 200 : ( int)obj;
            }
             set
            {
                ViewState["MaxHeight"] = value;
            }
        }

        [DefaultValue(60)]
         public  int MinHeight
        {
             get
            {
                 object obj = ViewState["MinHeight"];
                 return obj ==  null ? 60 : ( int)obj;
            }
             set
            {
                ViewState["MinHeight"] = value;
            }
        }

         protected  override  void OnPreRender(EventArgs e)
        {
             this.Attributes["minHeight"] =  this.MinHeight.ToString();
             if (  this.Height == Unit.Empty )
            {
                 this.Height =  this.MinHeight;
            }
             else
            {
                 this.Height = ( int)Math.Max( this.MinHeight,  this.Height.Value);
            }
             base.OnPreRender (e);
        }

         ///   <summary>  
        
///  Render this control to the output parameter specified.
        
///   </summary>
        
///   <param name="output">  The HTML writer to write out to  </param>
         protected  override  void Render(HtmlTextWriter output)
        {
             string strCode;
             if (  this.MaxHeight <= 0 )
            {
                strCode = "this.style.height=Math.max(this.minHeight,this.scrollHeight)+(this.offsetHeight-this.clientHeight)";
            }
             else
            {
                strCode = "this.style.height=(this.scrollHeight>200)?200:Math.max(this.minHeight,this.scrollHeight)+(this.offsetHeight-this.clientHeight)";
            }
             base.Attributes["onpropertychange"] = strCode;
             //  base.Attributes["onfocus"] = "this.height=this.height";
             if (  base.Rows == 0 )
            {
                 base.Rows = 1;
            }
             base.TextMode = TextBoxMode.MultiLine;
             base.Render(output);
        }
    }
}
#endregion


本文转自博客园鸟食轩的博客,原文链接:http://www.cnblogs.com/birdshome/,如需转载请自行联系原博主。

目录
相关文章
Winform中Textbox、NumericUpDown等修改高度,禁止输入数字或内容的实现
Winform中的Textbox、NumericUpDown控件通常在单行的情况下,无法直接通过`Height`属性修改高度,但很多时候我们需要调整其高度,使其显示的更加合理,主要介绍三种方法...
2511 0
|
4月前
|
图形学
小功能⭐️Unity自动更改文本框高度,以显示全部文本
小功能⭐️Unity自动更改文本框高度,以显示全部文本
|
7月前
textarea文本框根据输入内容自动适应高度
textarea文本框根据输入内容自动适应高度
117 0
|
7月前
[Qt5&控件] 选项卡tabWidget控件隐藏&增加tab个数
[Qt5&控件] 选项卡tabWidget控件隐藏&增加tab个数
499 0
|
JavaScript 前端开发
实现 input无内容是缩小居中显示,有内容,有焦点时变长显示
前两天做了一个搜索中间页,有个 input 的效果挺有意思,准备分享一下。
179 0
实现 input无内容是缩小居中显示,有内容,有焦点时变长显示
|
C#
【WPF】设置TextBox内容为空时的提示文字
原文:【WPF】设置TextBox内容为空时的提示文字 ...
4695 0
|
前端开发
表单label里的文字默认是靠下的,如何靠上对齐?
0df3d7ca7bcb0a468694703e6a63f6246b60af07.jpg 给文本域加一个vertical-align:top;的CSS样式就行了,像这样: 文本域
1624 0
|
开发框架 JavaScript 前端开发
|
Web App开发 Ubuntu 前端开发