我在使用Graphics.DrawString()方法时遇到了问题。我的用户控件使用等宽字体在面板上绘制,但显然,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);
例如,在Consolas 9中绘制“eeeeeeee”时,偶尔会有两个'e'彼此靠近1像素。有没有一种方法可以正确显示文本,使其等宽?
(我的实际问题是:我正在从头开始制作自己的文本框控件,作为练习和娱乐。实际上进展顺利,但显示文本的面板应该能够根据鼠标单击位置定位插入符号。由于字体的高度属性,找到正确的行很容易。然而,找到该行中的当前索引不是那么容易。对于非等宽字体,我无法想象出确定插入符号索引的方法,但对于等宽字体,应该是可行的,因为一个符号的宽度是固定的。所以,也许有更好的方法来确定这个吗?)
此致 敬礼, Jacco
graphics.TextRenderingHint
设置为不同的值,以使其以与TextRender
相同的方式绘制文本。我不记得要设置什么特定的值,但只有大约5个选择。 - Bradley Uffner