我有以下代码在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.如何以正确的方式修复此问题?
答案 0 :(得分:3)
你不能使用AutoSize
属性吗?
MeasureString
众所周知是不准确的,但通常会返回比您预期的更大的尺寸:
MeasureString方法设计用于单个字符串,并在字符串之前和之后包含少量额外空格,以允许悬垂字形。此外,DrawString方法调整字形点以优化显示质量,并可能显示比MeasureString报告的字符串更窄的字符串。要获取适合布局中相邻字符串的度量(例如,在实现格式化文本时),请使用MeasureCharacterRanges方法或采用StringFormat的MeasureString方法之一,并传递GenericTypographic。另外,请确保Graphics的TextRenderingHint是AntiAlias。
答案 1 :(得分:2)
ToSize()将SizeF的值截断为下一个较低的整数值。
所以,为了避免损失,你可以这样做:
l.Size = (CreateGraphics().MeasureString(_name, l.Font) + new SizeF(1, 0)).ToSize();
答案 2 :(得分:0)
当你声明字体与UI字体大小相比时,是否像缩小尺寸一样简单?