2016-07-17重大更新

          其实有更好、更系统的方法,也是最近才发现的,分享给大家!!

        /// <summary>
///
/// </summary>
/// <param name="width"></param>
public MyControl(int width)
: this()
{
this.Width = width;
this.richtxtContent.Width = this.Width - 30; this.richtxtContent.WordWrap = true;
this.richtxtContent.ScrollBars = RichTextBoxScrollBars.None;
this.richtxtContent.ContentsResized += new ContentsResizedEventHandler(richtxtContent_ContentsResized);
} /// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void richtxtContent_ContentsResized(object sender, ContentsResizedEventArgs e)
{
RichTextBox rtb = sender as RichTextBox;
if (rtb != null)
{
rtb.Size = e.NewRectangle.Size;
}
}

-------------------------------------------------------------------------------------

  在WinForm开发中,经常会用到RichTextBox控件,也经常会碰到需要自动调节RichTextBox高度的场景。本人鉴于这种情况,查阅了一些资料,确定了正确的方法。

  基本思路就是获取RichTextBox中一行文本的实际高度。

  1、首先计算出RichTextBox中文本的行数
     
        int rowCount = this.txtBox.GetLineFromCharIndex(this.txtBox.SelectionStart) + 1;
 
  2、然后计算一行文本的高度
 
    System.Drawing.Point ptLine1  //第一行第一个字节的坐标
        = this.txtBox.GetPositionFromCharIndex(this.txtBox.GetFirstCharIndexFromLine(0));
    System.Drawing.Point ptLine2  //第二行第一个字节的坐标
        = this.txtBox.GetPositionFromCharIndex(this.txtBox.GetFirstCharIndexFromLine(1)); 
   
    其中GetFirstCharIndexFromLine是从指定行获取第一个字节的序号(index),GetPositionFromCharIndex则是获取指定序号(index)字节的坐标。
 
        注:为了取得正确的ptLine2,一定要保证RichTextBox文本至少有二行。
 
  3、然后,计算RichText的行高度
       
    int textLineHeight = ptLine2.Y - ptLine1.Y;
 
  4、然后,计算RichTextBox的高度
 
    this.txtBox.Height = rowCount * txtLineHeight
                               + this.txtBox.Margin.Top 
                               + this.txtBox.Margin.Bottom;
 
    其中,this.txtBox.Margin.Top为顶部空白,this.txtBox.Margin.Bottom为底部空白。
 
  5、然后就木有然后了~
     

计算纯文本情况下RichTextBox实际高度的正确方法(.NET)的更多相关文章

  1. Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法

    详细说明:Visual c++例子,可不使用常规的对话框资源模板的情况下,动态创建对话框的方法.该方法可以在运行时在内存中直接建立对话框资源,使用起来更为灵活.适用于多个开发项目共享有界面的公用程序模 ...

  2. 没有 iOS 开发者账号的情况下部署到真机的方法

    原文发表于我的技术博客 本文分享了官方推荐的没有 iOS 开发者账号的情况下部署到真机的方法,供参考. 原文发表于我的技术博客 1. 官方推荐的方法 原文在此,也就是 Ionic 官方团队在博客中分享 ...

  3. 关于img标签浏览器自带的边框,清除边框的解决方式(即img[src=""] img无路径情况下,灰色边框去除解决方法)

    详解img[src=""] img无路径情况下,灰色边框去除解决方法 1.Js解决办法 <html> <head> <meta charset=&qu ...

  4. 关于在gridview中有dorpdownlist的情况下使用自带编辑模板的方法

    今天记录一下在gridview中,如果有dropdownlist的情况下使用gridview自带编辑模式的方法. 好吧,今天的这个问题有点绕,详细解释一下目的. 因为gridview中的某些列的数据是 ...

  5. ASP.NET在不同情况下实现单点登陆(SSO)的方法

    第一种:同主域但不同子域之间实现单点登陆 Form验证其实是基于身份cookie的验证.客户登陆后,生成一个包含用户身份信息(包含一个ticket)的cookie,这个cookie的名字就是在web. ...

  6. linux服务器没网情况下手动安装软件几个方法

    1,找到一个有网的服务器,使用yumdownloader gcc,获取需要的rmp包: 2,在http://pkgs.org 下下载所需要的rpm包

  7. 在没有创建Provision Profile权限的情况下 发布Enterprise inhouse app 的方法

    由于用普通开发者证书,发布的app或ipa没法在普通机器上安装运行,原因是apple限制了普通开发者发布appstore以外的环境中,只有Enterprise企业版证书才能发布inhouse. 今天在 ...

  8. 在yum出问题的情况下安装某个rpm包的方法

    1 核心命令 rpm -i 2 方法 centos镜像站去找到所有的rpm包. 安装这个rpm包,发现有一个依赖没有安装,就去下载安装.因为整体的包是有限的,因此终会收敛的. 比如安装rpmbuild ...

  9. LODOP中纸张高度不定超文本和纯文本对比

    关于纸张高度不定的小票打印,建议使用纯文本进行设计,避免纸张高度引起变形,或超文本解析差异造成一些影响:LODOP纸张高度不定的纯文本累计高度 上面的链接的博文里,纯文本可通过间距和高度值累计,得出最 ...

随机推荐

  1. Javasocket1

    转载自http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html java socket编程 一,网络编程中两个主要的问题 一个是如 ...

  2. <转>修改TM2013聊天记录保存目录final版

    一直很钟意TM的清爽,然而在升级到TM2013 preview1后,发生了一件很让人头痛的事.    那就是无法设定消息目录,TM会默认为保存在我的文档下.这让使用dropbox同步聊天记录的我感到十 ...

  3. (一)kafka修改topic分区的位置

    (一)kafka修改topic分区的位置 环境:kafka_2.10-0.8.2.1 + JDK1.7.0_80 1. 查看分区topic的分区分布 $ le-kafka-topics.sh --de ...

  4. python成长之路【第四篇】:装饰器

    实现装饰器的知识储备: 示例: def f1(): print("f1") 1.函数即“变量” #上面的示例中,函数f1为变量,它指向内存地址.而f1()表示函数执行. 2.高阶函 ...

  5. ~是什么意思 在C语言中,~0代表什么

    是c语言中的位运算符:取反.0在内存中的存储方式是所有位为0,0000000000000000那么按位取反后位16个1(如果整形在你的机器上站16位),那么表示的数为-1.

  6. 响应式 css

    1.class 样式一般用class,命名:中横线分隔,如:div-logo id 一般用于js快速地区别和获取元素,命名:驼峰命名法,如:divLogo (中间首字母大写) 2.必不可少的图片,用& ...

  7. Linux 控制 配置 减少 交换分区 SWAP 虚拟内存使用

    对于某些大型应用来说,SWAP 严重影响性能,尽可能避免使用: The Linux kernel provides a tweakable setting that controls how ofte ...

  8. CSS 3 3D转换

    绘制3D环境 父元素设置了 preserve-3d  子元素就可以以父元素作为平面进行3d转换 transform-style: preserve-3d; 设置视点 :表示透视效果  值越小 透视效果 ...

  9. SPSS数据分析—最小一乘法

    线性回归最常用的是以最小二乘法作为拟合方法,但是该方法比较容易受到强影响点的影响,因此我们在拟合线性回归模型时,也将强影响点作为要考虑的条件.对于强影响点,在无法更正或删除的情况下,需要改用更稳健的拟 ...

  10. [转]jQuery.validate插件在失去焦点时执行验证代码

    转:http://my.oschina.net/enyo/blog/311566 关于 jquery.validate.js 表单验证插件如何在失去焦点时做验证.看手册后发现默认是在表单提交时执行验证 ...