【发布时间】:2011-12-18 23:02:32
【问题描述】:
我遇到了 Graphics.DrawString() 方法的问题。我的 UserControl 使用等宽字体在面板上绘图,显然,DrawString() 以这样一种方式格式化文本,它不再完全等宽。我一直在使用 StringFormat 希望解决这个问题,但没有成功:
StringFormat sf = new StringFormat(StringFormatFlags.NoClip | StringFormatFlags.FitBlackBox | StringFormatFlags.LineLimit | StringFormatFlags.MeasureTrailingSpaces);
绘制文字的代码:
for (int i = 0; i < document.Text.Count; i++)
g.DrawString(document.Text[i], Font, Brushes.Black, new PointF(offset - 2, offset + Font.Height * i), sf);
例如,当绘制“eeeeeeee”时,在 Consolas 9 中,两个 e 将不时靠近另一个 1 像素。有没有办法正确显示文本,等宽?
(我的实际问题:我正在从头开始制作自己的文本框控件,作为练习和娱乐。实际上进行得很好,但是显示文本的面板应该能够根据鼠标单击位置定位插入符号.找到正确的行很容易,因为字体的高度属性。但是,在该行中找到当前索引不是。对于非等宽字体,我无法想象确定插入符号索引的方法,但对于等宽字体它应该是可行的,因为符号的宽度是固定的。所以,也许有更好的方法来确定这一点?)
亲切的问候, 贾科
【问题讨论】: