2

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

4

1 回答 1

3

不容易做到。 也许有一个 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));
  }
}
于 2012-05-14T18:40:57.427 回答