0

我有以下代码在 aLabel上创建 a 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。我怎样才能以正确的方式解决这个问题?

4

3 回答 3

4

不能使用AutoSize楼盘吗?

MeasureString是出了名的不准确,尽管通常它返回的大小比您预期的要大:

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

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

于 2012-10-25T13:44:54.930 回答
3

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

因此,为避免损失,您可以执行以下操作:

l.Size = (CreateGraphics().MeasureString(_name, l.Font) + new SizeF(1, 0)).ToSize();
于 2012-10-25T13:43:44.883 回答
0

与 UI 字体大小相比,当您声明字体时,是否像错误的大小一样简单?

于 2012-10-25T13:37:43.553 回答