我想在我的文本框的子类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