2009-01-16 189 views
23

我有一个这样的字符串:如何将字符串长度转换为像素单位?

string s = "This is my string"; 

我创建一个Telerik的报告,我需要定义一个textbox这是我的字符串的宽度。然而,尺寸属性需要设置为单位(像素,点,英寸等)。我怎样才能把我的字符串长度转换成像素,这样我就可以设置宽度了?

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

回答

52

,不使用控制或形式:

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 
+2

似乎我认为MeasureString应该是一种静态方法。 – Kibbee 2009-01-16 20:56:53

+1

@Kibbee`MeasureString`需要一个`Graphics`,因为它考虑到了当前的图形转换。 – 2012-05-14 10:25:51

3

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

+0

我有字体名称,大小等我已经看过MeasureString方法,但无法弄清楚如何创建一个图形对象引用。我没有形式或控制,我只是想在课堂上弄清楚这一点。 – ScottG 2009-01-16 20:44:00

3

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

15
Size textSize = TextRenderer.MeasureText("How long am I?", font); 
3

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

  • 我加了一个看不见的Label它的AutoSize财产是true - 肮脏的工作 - 。
  • 当我想为特定字符串设置Width时,我将它设置为Label.Text
  • LabelWidth会给我正确的价值。