自动适应输入内容高度的TextBox控件(摘自罗永浩全集)
关于Web开发上面UI布局的问题,我上次介绍了一个可以自动适应输入内容宽度的TextBox控件,它可以解决在布局时预留控件大小和用户数入内容多少上的矛盾。但是由于那个控件被限制了只能做为单行输入使用,在输入大块文本时就力不从心了,那么就再做一个可自动适应高度的TextBox。
原理和那个适应宽度的TextBox查不多,只是这个反而更加简单,因为在高度方向上增长不会破坏页面的整体布局效果(宽度上的如果在页内会挤走别的元素的),所以就不需要使用Agent TextBox来作为实际录入的容器了,直接把<TextArea>增高就行了。
响应onpropertychange事件,同步内容和<TextArea>的高度。当然如果完全根据内容增高可能也会因为内容太多而变得难看,就设置了一个最大高度限制属性。控件效果如下:
最大高度为200px的AutoTextBox Demo:
最大高度为200px但初始高度为3rows的AutoTextBox Demo:
高度增长无限制的AutoTextBox Demo:
如果控件的MaxHeight属性小于或等于0,那么增长高度无限制。
附 AutoTextBox 控件源码#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
分享到:
相关推荐
c# winform textbox控件只能输入数字的几种方法
c# TextBox 控件透明
C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码高亮的WinForm的TEXTBOX控件C#代码...
winform中关于textbox控件使用详解
VB适用的多输入格式的TextBox输入控件,比如这个控件可进行一些输入的限制,比如只允许输入大写字母、必须输入整数,必须输入小数,必须输入日期时间格式,只允许输入数字和小数点,允许任意字符等,若输入规定之外...
支持模糊查询的自定义TextBox控件,绑定dateset后就能使用,具体样式可以自己调试。
C# 入门一一事件(event)的应用:如何在TextBox控件中实时显示Log
winform中关于textbox控件使用详解
实现只能输入数字(或小数)的TextBox控件
制定控件只输入数字,对其他的空间具有借鉴意义。
asp.net 自定义textbox控件,带有客户端验证
C#/WinForm/TextBox控件的输入内容控制
自定义的一个TextBox控件,包含限制只能输入数字、验证邮箱、电话、手机、身份证号码、邮件地址等功能,提供源码,蛮适合初学者学习和使用的~~
TextBox 控件自定义快捷键TextBox 控件自定义快捷键
该案例主要实现TextBox控件在输入时,自动给出若干提示信息,提供自动补全功能
Tablelayoutpanel控件自动添加textbox,label控件,并布局
自己做的textbox控件,可限制输入格式,包含生成dll文件的项目和应用的例子
ASP.Net TextBox控件只允许输入数字的几种方法
自动计算控件: javascript对于页面中的TEXTBOX控件进行计算 javascript对于页面中的TEXTBOX控件进行计算
自己做的一个可限制输入的TextBox控件 新建以下3个属性 MaxByteLength:限定输入的字节长度 prohibitionPaste:是否允许粘贴 TextBoxType: Normal 普通输入 NumberOnly 只能输入半角数字 LettersOnly 只能输入...