Graphics.DrawString()メソッドに問題があります。私のUserControlは、モノスペースのフォントをパネル上に描画するために使用しています。また、DrawString()はテキストをこのようにフォーマットしています。私はこれを修正することを期待してStringFormatを使用して、成功せずされています:DrawString()を使用してテキストを正しく描画する
StringFormat sf = new StringFormat(StringFormatFlags.NoClip | StringFormatFlags.FitBlackBox | StringFormatFlags.LineLimit | StringFormatFlags.MeasureTrailingSpaces);
コードをテキスト描画するための「EEEEEEEE」を描画するときに、例えば
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に、今は2つのeが1ピクセルずつ別のものになります。モノスペースのテキストを正しく表示する方法はありますか?
(私の実際の問題:自分のテキストボックスコントロールを最初から演習として、楽しいものとして作っています。実際にはうまくいっていますが、テキストを表示するパネルはマウスのクリックに応じてキャレットを配置できる必要がありますフォントの高さプロパティのため、正しい行を見つけるのは簡単ですが、その行の現在のインデックスを見つけることはできません。非固定幅フォントの場合、キャレットインデックスを決定する方法は想像できませんが、シンボルの幅が固定されているので、それは、なんとかあるべきフォント。だから、多分これを決定するためのより良い方法はありますか?)
敬具、 Jacco
AntiAliasフラグを使用すると、フォントサイズが12の場合でも、実際に私の目には見えないようになります。 –
ありがとうございます!図面はTextRendererを使用して完全に動作します。しかし、TextRenderer.MeasureString()で測定すると問題が発生します。 TextFormatFlags.NoPaddingをTextFormatFlagsに設定した後でも、 "abcd"のような文字列の測定値は正しくない(25の幅を与え、Consolas 9の28でなければなりません) "不思議なことに" 7の代わりに10を与えます。 –
'graphics.TextRenderingHint'を' TextRender'と同じように異なる値に設定することもできます。私はそれを設定する特定の値を覚えていませんが、わずか5つの選択肢があります。 –