如何获得字符串的宽度

时间:2015-01-12 13:10:15

标签: c#-4.0 dll

修改

图形来自内存中的Pdf,但我不确定如何在Graphics类中使用它... 不确定这个答案中的内容是什么Get System.Drawing.Font width?


  • 这是我正在处理的图书馆项目 - 而不是Windows窗体。

第一个问题

尝试使用此方法获取字符串的宽度,

    public static void GetStringWidth(string measureString)
    {
        Font stringFont = new Font("Arial", 16);
        SizeF stringSize = new SizeF();
        stringSize = Graphics.MeasureString(measureString, stringFont);
        double width = stringSize.Width;

        Console.WriteLine(width);
    }

但是收到错误

非静态字段,方法或属性'System.Drawing.Graphics.MeasureString(string,System.Drawing.Font)'

需要对象引用

enter image description here

1 个答案:

答案 0 :(得分:1)

MeasureString不是静态方法。您将需要使用Graphics实例来访问它。

例如:

private void MeasureString(PaintEventArgs e)
{
    string measureString = "Measure String";
    Font stringFont = new Font("Arial", 16);
    SizeF stringSize = new SizeF();
    stringSize = e.Graphics.MeasureString(measureString, stringFont);
}

如果您正在引用System.Windows.Forms,请使用TextRenderer类,这将减轻您使用Graphics对象的负担。

private void MeasureText()
{
    String text1 = "Some Text";
    Font arialBold = new Font("Arial", 16);
    Size textSize = TextRenderer.MeasureText(text1, arialBold);
}

更新:

您可以使用假图像使用Graphics测量字符串,因为我们无法在类库中使用CreateGraphics:

private void MeasureString()
{
    string measureString = "Measure String";
    Font font = new Font("Arial", 16);
    Image fakeImage = new Bitmap(1,1); 
    Graphics graphics = Graphics.FromImage(fakeImage);
    SizeF size = graphics.MeasureString(measureString, font);
}