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