winform richtextbox自定义控件时高度自适应

描述:自定义了一个userControl,名为RichTextBoxName(这只是个名字,不是RichTextBox控件),在这个userControl里添加了一个RichTextBox控件,然后在其他控件需要显示这个userControl,希望richtextbox的高度可以根据内容自适应。

思路:先获得richtextbox的高度,然后调整userControl的高度。

    这里需要把richtextbox的anchor设好,usercontrol高度变化的时候里面的richtextbox需要跟着变化

    获得richtextbox的高度,需要知道它里面的内容,计算出一共有几行,然后用每一行的高度乘以行数就是richtextbox的高度了。

    一开始我存的是字符串,根本get不到行数,永远都是一行。所以需要在字符串中加入分隔符,这样就知道有几行了。然后获得每一行的高度,把第一行和第二行的位置都得到,相减就是一行的高度。

代码:

userControl(RichTextBoxName)中定义一个外部可以调用的属性,这样获得内容就可以开始计算高度了;

public string Content
        {
            set
            {
                richTextBox1.Text = value;
                int i = richTextBox1.Lines.Count();    //行数
                System.Drawing.Point ptLine1  //第一行第一个字节的坐标
            = richTextBox1.GetPositionFromCharIndex(richTextBox1.GetFirstCharIndexFromLine(0));
                if (i > 1)    如果不止一行
                {
                    System.Drawing.Point ptLine2  //第二行第一个字节的坐标
                = richTextBox1.GetPositionFromCharIndex(richTextBox1.GetFirstCharIndexFromLine(1));
                    int TextLineHeight = ptLine2.Y - ptLine1.X;    //每一行高度
                    this.Height = i * TextLineHeight;  
                }

            }
        }

后来我把这个方法放进项目工程里的时候发现,我的字符串里没有办法保存换行字符,所以行数还是要自己计算。后来我找到了一个方法GetLineFromCharIndex(int index),可以获得索引值位置所在的行数:

int i = richTextBox1.GetLineFromCharIndex(richTextBox1.Text.Length);

这样就知道了最后一个字符所在行数,也就是所有的行数。

我真聪明!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值