MeasureString()没有返回足够的宽度

时间:2012-10-25 13:34:10

标签: c# label measurestring

我有以下代码在Label上创建PictureBox

Label l = new Label();
l.Text = _name;
l.Size = CreateGraphics().MeasureString(_name, l.Font).ToSize();
l.BackColor = Color.White;

但标签总是丢弃最后一个字符。如果我在通话中添加一个字符:

l.Size = CreateGraphics().MeasureString(_name+".", l.Font).ToSize();

它工作正常,但感觉不对。

标签中的文字前面似乎有一些空格,但Padding设置为0.如何以正确的方式修复此问题?

3 个答案:

答案 0 :(得分:3)

你不能使用AutoSize属性吗?

MeasureString众所周知是不准确的,但通常会返回比您预期的更大的尺寸:

  

MeasureString方法设计用于单个字符串,并在字符串之前和之后包含少量额外空格,以允许悬垂字形。此外,DrawString方法调整字形点以优化显示质量,并可能显示比MeasureString报告的字符串更窄的字符串。要获取适合布局中相邻字符串的度量(例如,在实现格式化文本时),请使用MeasureCharacterRanges方法或采用StringFormat的MeasureString方法之一,并传递GenericTypographic。另外,请确保Graphics的TextRenderingHint是AntiAlias。

http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

答案 1 :(得分:2)

ToSize()将SizeF的值截断为下一个较低的整数值。

所以,为了避免损失,你可以这样做:

l.Size = (CreateGraphics().MeasureString(_name, l.Font) + new SizeF(1, 0)).ToSize();

答案 2 :(得分:0)

当你声明字体与UI字体大小相比时,是否像缩小尺寸一样简单?