我想知道是否有更好的方法解决这个问题.我想调整标签的大小(垂直)以容纳一定数量的文本.我的标签有一个固定的宽度(在它必须包裹之前大约60个字符宽),大约495像素.字体也是固定大小(12分afaik),但文本不是.
我想要做的是当有"NewLine"或文本必须换行时增加Label Height; 这个想法是文本在标签中完全可见.AutoSize不起作用,因为它会在宽度上增长,而不是在高度上增长.
当然我可以计算NewLines的数量并添加:Newlines*LineHeight,然后-given我设法每行放60个字符,只需要分割字符数并根据需要添加尽可能多的LineHeight像素.
我想知道是否有更专业的方法来做到这一点.我的做法太"蹩脚"了吗?
提前致谢.
Graphics.MeasureString
接受字符串,字体和最大宽度的重载怎么样?这返回一个SizeF
,所以你可以四舍五入Height
.
using(Graphics g = CreateGraphics()) { SizeF size = g.MeasureString(text, lbl.Font, 495); lbl.Height = (int) Math.Ceiling(size.Height); lbl.Text = text; }
System.Drawing.Graphics有一个MeasureString方法,您可以将其用于此目的.使用带有字符串,字体和int"width"参数的重载; 最后一个参数指定字符串允许的最大宽度 - 使用此参数的标签设置宽度.
MeasureString返回一个SizeF对象.使用此返回对象的Height属性设置标签的高度.
注意:要获得用于此目的的Graphics对象,可以调用this.CreateGraphics.
Graphics.MeasureString()可能会帮助你.
这也是使用Control.CreateGraphics()调用的唯一用例之一!
Size maxSize = new Size(495, int.MaxValue); _label.Height = TextRenderer.MeasureText(_label.Text , _label.Font, maxSize).Height;