当前位置:  开发笔记 > 编程语言 > 正文

根据Winforms/C#中的文本和字体大小确定标签大小

如何解决《根据Winforms/C#中的文本和字体大小确定标签大小》经验,为你挑选了4个好方法。

我想知道是否有更好的方法解决这个问题.我想调整标签的大小(垂直)以容纳一定数量的文本.我的标签有一个固定的宽度(在它必须包裹之前大约60个字符宽),大约495像素.字体也是固定大小(12分afaik),但文本不是.

我想要做的是当有"NewLine"或文本必须换行时增加Label Height; 这个想法是文本在标签中完全可见.AutoSize不起作用,因为它会在宽度上增长,而不是在高度上增长.

当然我可以计算NewLines的数量并添加:Newlines*LineHeight,然后-given我设法每行放60个字符,只需要分割字符数并根据需要添加尽可能多的LineHeight像素.

我想知道是否有更专业的方法来做到这一点.我的做法太"蹩脚"了吗?

提前致谢.



1> Marc Gravell..:

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;
        }


我知道这是非常古老的,而且我知道我非常挑剔,但这个主题http://stackoverflow.com/questions/6704923/textrenderer-measuretext-and-graphics-measurestring-mismatch-in-size似乎表明在正常情况下TextRenderer.MeasureText提供比Graphics.MeasureString更准确的结果.

2> MusiGenesis..:

System.Drawing.Graphics有一个MeasureString方法,您可以将其用于此目的.使用带有字符串,字体和int"width"参数的重载; 最后一个参数指定字符串允许的最大宽度 - 使用此参数的标签设置宽度.

MeasureString返回一个SizeF对象.使用此返回对象的Height属性设置标签的高度.

注意:要获得用于此目的的Graphics对象,可以调用this.CreateGraphics.



3> Quibblesome..:

Graphics.MeasureString()可能会帮助你.

这也是使用Control.CreateGraphics()调用的唯一用例之一!



4> Hacko..:
Size maxSize = new Size(495, int.MaxValue);
_label.Height = TextRenderer.MeasureText(_label.Text , _label.Font, maxSize).Height;

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有