自动适应输入内容高度的TextBox控件-阿里云开发者社区

开发者社区> 唐玄奘> 正文

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

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

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

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

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

ExpandedBlockStart.gif#region 附 AutoTextBox 控件源码
InBlock.gifusing System;
InBlock.gifusing System.Web.UI;
InBlock.gifusing System.Web.UI.WebControls;
InBlock.gifusing System.ComponentModel;
InBlock.gif
InBlock.gifnamespace WebExcel.UI.WebControls
ExpandedSubBlockStart.gif{
ExpandedSubBlockStart.gif    /// <summary>
InBlock.gif    
/// Summary description for AutoLengthTextBox.
ExpandedSubBlockEnd.gif    
/// </summary>
InBlock.gif    [DefaultProperty("Text"), 
InBlock.gif        ToolboxData("<{0}:AutoTextArea runat=server></{0}:AutoTextArea>")]
InBlock.gif    public class AutoTextArea : System.Web.UI.WebControls.TextBox
ExpandedSubBlockStart.gif    {
InBlock.gif        [DefaultValue(200)]
InBlock.gif        public int MaxHeight
ExpandedSubBlockStart.gif        {
InBlock.gif            get
ExpandedSubBlockStart.gif            {
InBlock.gif                object obj = ViewState["MaxHeight"];
InBlock.gif                return obj == null ? 200 : (int)obj;
ExpandedSubBlockEnd.gif            }
InBlock.gif            set
ExpandedSubBlockStart.gif            {
InBlock.gif                ViewState["MaxHeight"] = value;
ExpandedSubBlockEnd.gif            }
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif        [DefaultValue(60)]
InBlock.gif        public int MinHeight
ExpandedSubBlockStart.gif        {
InBlock.gif            get
ExpandedSubBlockStart.gif            {
InBlock.gif                object obj = ViewState["MinHeight"];
InBlock.gif                return obj == null ? 60 : (int)obj;
ExpandedSubBlockEnd.gif            }
InBlock.gif            set
ExpandedSubBlockStart.gif            {
InBlock.gif                ViewState["MinHeight"] = value;
ExpandedSubBlockEnd.gif            }
ExpandedSubBlockEnd.gif        }
InBlock.gif
InBlock.gif        protected override void OnPreRender(EventArgs e)
ExpandedSubBlockStart.gif        {
InBlock.gif            this.Attributes["minHeight"] = this.MinHeight.ToString();
InBlock.gif            if ( this.Height == Unit.Empty )
ExpandedSubBlockStart.gif            {
InBlock.gif                this.Height = this.MinHeight;
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif            {
InBlock.gif                this.Height = (int)Math.Max(this.MinHeight, this.Height.Value);
ExpandedSubBlockEnd.gif            }
InBlock.gif            base.OnPreRender (e);
ExpandedSubBlockEnd.gif        }
InBlock.gif
ExpandedSubBlockStart.gif        /// <summary> 
InBlock.gif        
/// Render this control to the output parameter specified.
InBlock.gif        
/// </summary>
ExpandedSubBlockEnd.gif        
/// <param name="output"> The HTML writer to write out to </param>
InBlock.gif        protected override void Render(HtmlTextWriter output)
ExpandedSubBlockStart.gif        {
InBlock.gif            string strCode;
InBlock.gif            if ( this.MaxHeight <= 0 )
ExpandedSubBlockStart.gif            {
InBlock.gif                strCode = "this.style.height=Math.max(this.minHeight,this.scrollHeight)+(this.offsetHeight-this.clientHeight)";
ExpandedSubBlockEnd.gif            }
InBlock.gif            else
ExpandedSubBlockStart.gif            {
InBlock.gif                strCode = "this.style.height=(this.scrollHeight>200)?200:Math.max(this.minHeight,this.scrollHeight)+(this.offsetHeight-this.clientHeight)";
ExpandedSubBlockEnd.gif            }
InBlock.gif            base.Attributes["onpropertychange"] = strCode;
InBlock.gif            // base.Attributes["onfocus"] = "this.height=this.height";
InBlock.gif
            if ( base.Rows == 0 )
ExpandedSubBlockStart.gif            {
InBlock.gif                base.Rows = 1;
ExpandedSubBlockEnd.gif            }
InBlock.gif            base.TextMode = TextBoxMode.MultiLine;
InBlock.gif            base.Render(output);
ExpandedSubBlockEnd.gif        }
ExpandedSubBlockEnd.gif    }
ExpandedSubBlockEnd.gif}
ExpandedBlockEnd.gif#endregion


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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
AutoCompleteTextView 自动提示
在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextView实现的。   public class MainActivity extends Activity { private AutoCompleteText...
650 0
C++中消息自动派发之一 About JSON
1. 闲序   游戏服务器之间通信大多采用异步消息通信。而消息打包常用格式有:google protobuff,facebook thrift, 千千万万种自定义二进制格式,和JSON。前三种都是二进制格式,针对C++开发者都是非常方便的,效率和包大小(数据冗余度)也比较理想。
870 0
poi读取excel模板,填充内容并导出,支持导出2007支持公式自动计算
/** * 版权所有(C) 2016 * @author www.xiongge.club * @date 2016-12-7 上午10:03:29 */ package xlsx; /** * @ClassName: CreateExcel * @Description: TODO() * @author www.xiongge.club *
2020 0
9月20日科技联播:美团今日上市估值超小米京东;阿里巴巴获杭州第一张自动驾驶牌照
美团今日在港敲钟,估值超小米京东,成中国第四大互联网公司 ,“半个互联网敌人”王兴迎来人生巅峰;阿里宣布将路铺在互联网上,云栖现场获得杭州首张自动驾驶牌照;美图秀秀全面改版进军社交,它能讲好“中国Instagram”的故事吗?一起来看今天的科技快讯!
1346 0
C++中消息自动派发之三 About JSON Encode
  《C++ 消息自动派发》系列上篇介绍了IDL解析器,生成的C++代码只支持JSON转C++ struct。 经过新的重构,这次增加了对C++ struct 转JSON的支持。IDL解析器自动为C++ struct生成两个方法。
849 0
div 自适应高度 自动填充剩余高度
方案1: Html: 头部DIV 下部DIV CSS: html, body { height: 100%; padding: 0; margin: 0; } .
879 0
Android EditText 获得输入焦点 以及requestfocus()失效的问题
最近做公司项目的时候,经常会遇到一个问题,就是我为某个控件如EditText设置requestfocus()的时候不管用,比如说登陆的时候,我判断下用户输入的密码,如果正确就登陆,错误就提示密码错误,并且输入框获取焦点,但是实际中确不起作用 package com.
1095 0
duilib 修复Text控件无法设置宽度的bug,增加自动加算宽度的属性
转载请说明原出处,谢谢~~:       今天有朋友反映CTextUI控件无法设置宽度,于是修复了这个bug,顺便给Text控件增加了一个自动计算宽度的属性,描述如下       bug出现在EstimeteSize函数,...
925 0
+关注
641
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载
《2021云上架构与运维峰会演讲合集》
立即下载