欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-07 13:20:33
...

描述:自定义了一个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;  
                }

            }
        }