我想在我的文本框的子類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號,例如:
正如你可以看到,線切割線穿過0,當改爲它應該是的0
權編輯:
我忘了提,「保證金」是WinForms.Label。
猜猜你將有不同的'TextFormatFlags'玩。 – leppie
首先要排除的是它是常數還是乘法。如果將它設置爲40,它是否與相同數量的結束字符重疊?如果是這樣,那麼顯然'LeftMargin'需要一些調整。 –
達明:如果我說'margin.Left = charWidth + LEFTMARGIN;',我也有同樣的問題:宋體是好的,但索拉不是。 – Tom