【发布时间】:2012-05-15 02:40:57
【问题描述】:
我正在创建一个扩展的 RichTextBox 控件,在其中我在文本行旁边绘制图标。我是用GetPositionFromCharIndex查找当前行和下一行的Y坐标,这样就可以确定当前行的高度和中间。当遇到最后一行时,此方法显然停止工作,因为没有下一行。有没有办法确定最后一行文本的高度?请注意,字体大小可能因行而异。
【问题讨论】:
标签: winforms richtextbox
我正在创建一个扩展的 RichTextBox 控件,在其中我在文本行旁边绘制图标。我是用GetPositionFromCharIndex查找当前行和下一行的Y坐标,这样就可以确定当前行的高度和中间。当遇到最后一行时,此方法显然停止工作,因为没有下一行。有没有办法确定最后一行文本的高度?请注意,字体大小可能因行而异。
【问题讨论】:
标签: winforms richtextbox
不容易做到。 也许对此有一个 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));
}
}
【讨论】: