【问题标题】:How to determine the text height for the last line in a RichTextBox?如何确定 RichTextBox 中最后一行的文本高度?
【发布时间】:2012-05-15 02:40:57
【问题描述】:

我正在创建一个扩展的 RichTextBox 控件,在其中我在文本行旁边绘制图标。我是用GetPositionFromCharIndex查找当前行和下一行的Y坐标,这样就可以确定当前行的高度和中间。当遇到最后一行时,此方法显然停止工作,因为没有下一行。有没有办法确定最后一行文本的高度?请注意,字体大小可能因行而异。

【问题讨论】:

    标签: winforms richtextbox


    【解决方案1】:

    不容易做到。 也许对此有一个 API 调用,但我不能 100% 确定。

    实现此目的的一个 hacky 方法是使用屏幕外 RichTextBox 控件并将 RTF 属性传输给它,这只是碰巧在末尾为您附加一个额外的 \par,所以有现在是额外的一行:

    using (RichTextBox r = new RichTextBox()) {
      r.SelectAll();
      r.SelectedRtf = richTextBox1.Rtf;
      for (int i = 1; i < r.Lines.Length; i++) {
        Point p1 = r.GetPositionFromCharIndex(r.GetFirstCharIndexFromLine(i - 1));
        Point p2= r.GetPositionFromCharIndex(r.GetFirstCharIndexFromLine(i));
        int height = p2.Y - p1.Y;
        MessageBox.Show(String.Format("Line #{0} height = {1}", i - 1, height));
      }
    }
    

    【讨论】:

    • 我也有类似的想法,但它涉及在实际文本的末尾添加一个换行符。
    猜你喜欢
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-09-02
    • 1970-01-01
    相关资源
    最近更新 更多