如何将字符串长度转换为像素单位?

Posted

技术标签:

【中文标题】如何将字符串长度转换为像素单位?【英文标题】:How can I convert a string length to a pixel unit? 【发布时间】:2010-10-01 21:38:33 【问题描述】:

我有一个这样的字符串:

string s = "This is my string";

我正在创建 Telerik 报告,我需要定义一个 textbox,这是我的字符串的宽度。但是,需要将 size 属性设置为单位(像素、点、英寸等)。如何将字符串长度转换为像素,以便设置宽度?

编辑:我尝试获取图形对象的引用,但这是在继承自 Telerik.Reporting.Report 的类中完成的。

【问题讨论】:

【参考方案1】:

在这种情况下,我通常使用一种肮脏但简单的方法:

我添加了一个不可见的Label,它的AutoSize 属性是true -肮脏的工作-。 当我想为特定字符串设置Width 时,我将其设置为Label.TextLabelWidth 将为我提供正确的值。

【讨论】:

兄弟太聪明了!【参考方案2】:

您可以使用MeasureString() 方法创建图形对象的实例。但是您需要将字体名称、字体大小和其他信息传递给它。

【讨论】:

我有字体名称、大小等。我查看了 MeasureString 方法,但无法弄清楚如何创建 Graphics 对象引用。我没有表单或控件,我只是想在课堂上解决这个问题。【参考方案3】:

不使用控件或表单:

using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(new Bitmap(1, 1)))

    SizeF size = graphics.MeasureString("Hello there", new Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Point));

或者在 VB.Net 中:

Using graphics As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(New Bitmap(1, 1))
    Dim size As SizeF = graphics.MeasureString("Hello there", New Font("Segoe UI", 11, FontStyle.Regular, GraphicsUnit.Point))
End Using

【讨论】:

在我看来 MeasureString 应该是一个静态方法。 @Kibbee MeasureString 需要Graphics,因为它考虑了当前的图形转换。 我相信 GraphicsUnit.PointGraphicsUnit.Pixel 的大小不同(不再)【参考方案4】:
Size textSize = TextRenderer.MeasureText("How long am I?", font);

【讨论】:

【参考方案5】:

也取决于字体。字符串长度不够。

【讨论】:

以上是关于如何将字符串长度转换为像素单位?的主要内容,如果未能解决你的问题,请参考以下文章

NSString 文本像素长度

如何测量图像中每个极点的长度(以像素为单位)

有啥方法可以计算字符串的像素长度?

前端学习 -- 长度单位

常用长度单位PX/EM/PT/百分比转换公式与对照表

如何将所有不同的组合作为字符串字符的不同长度的单位