我遇到了Graphics.DrawString()方法的問題。我的UserControl使用等寬字體在面板上繪製,顯然,DrawString()以這種方式格式化文本,使其不再是完全等寬的。我一直在使用中修復這個,希望可以的StringFormat,但沒有成功:使用DrawString()正確繪製文本
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);
例如,繪製在索拉9「eeeeeeee」,當,不時地,兩個e將接近另一個像素1個像素。有沒有辦法正確顯示文本,等寬? (我的實際問題是:我從頭開始製作自己的文本框控件,作爲一個練習和樂趣,實際上它很順利,但是顯示文本的面板應該能夠根據鼠標點擊來定位插入符號由於字體的高度屬性,查找正確的行很容易,但是找到該行中的當前索引不是,對於非等寬字體,我無法想象一種方法來確定插入索引,但是對於等寬字體字體應該是可行的,因爲符號的寬度是固定的,所以,也許有更好的方法來確定這一點?)
親切的問候, Jacco
AntiAlias標誌使字體看起來對我來說真的很糟糕,即使在12號尺寸下 – 2011-12-18 23:23:55
謝謝!該繪圖現在使用TextRenderer完美工作。使用TextRenderer.MeasureString()進行測量時會出現一些問題。即使在將TextFormatFlags.NoPadding設置爲TextFormatFlags之後,像「abcd」這樣的字符串的測量結果也不正確(寬度爲25,應該是28,Consolas 9),「a」足夠奇怪地給出了10而不是7. – 2011-12-18 23:43:36
我相信您還可以將'graphics.TextRenderingHint'設置爲不同的值,以使其像TextRender一樣繪製文本。我不記得具體的價值,但只有5個左右的選擇。 – 2011-12-19 00:57:50