我正在创建一个扩展的RichTextBox控件,我在文本行旁边绘制图标。我正在使用GetPositionFromCharIndex来查找当前行和下一行Y坐标,以便可以确定当前行的高度和中间值。遇到最后一行时,此方法显然会停止工作,因为没有下一行。有没有办法确定最后一行文字的高度?请注意,字体大小可能因行而异。
答案 0 :(得分:3)
不容易做到。 也许有一个API调用,但我不是百分百肯定。
实现这一目标的一种黑客方法是使用屏幕外的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));
}
}