私はTextBoxサブクラスで80文字の余白を描こうとしています。ここに私のコードは次のとおりです。ここでTextRenderer.MeasureTextが不正確なのはなぜですか?
class FooTextBox : TextBox
{
...
void UpdateMarginPosition()
{
using (Graphics graphics = CreateGraphics()) {
int charWidth = TextRenderer.MeasureText(graphics, "M", Font,
ClientSize, TextFormatFlags.NoPadding).Width;
const int LeftMargin = 2;
margin.Left = charWidth * 80 + LeftMargin;
}
}
}
これは、特定のサイズ(例えば、サイズ10でクーリエ新)で特定のフォントのため正常に動作します:
しかし、他のフォントで、これはわずかであることが判明します不正確ですここではサイズ12でConsolasとスクリーンショットには、例えば、次のとおりです。
あなたが見ることができるように代わり、それは0
の右にあるべきとき、ラインは、0切り裂きます編集:
'margin'はWinForms.Labelです。
異なる 'TextFormatFlags'で遊ぶ必要があると思います。 – leppie
最初に除外すべきことは、その定数か乗算かどうかです。それを40に設定すると、同じ文字数で終了文字が重なりますか?もしそうなら、明らかに 'LeftMargin'はいくらかの調整が必要です。 –
Damien:もしmargin.Left = charWidth + LeftMargin;と言うと、同じ問題があります:Courier Newは問題ありませんが、Consolasはそうではありません。 – Tom