2015-01-12 84 views
2

編輯如何獲得字符串的寬度

圖形是從內存中的PDF閱讀器,但我不知道如何使用與Graphics類... 不知道什麼是E在這個答案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); 
    } 

但得到錯誤,

的對象引用是必需的非靜態字段,方法或適當的TY 'System.Drawing.Graphics.MeasureString(字符串,System.Drawing.Font)'

enter image description here

+0

你調用一個實例方法,就好像它是靜態的。 – Ani

+0

這就是我的想法,但我不知道它是什麼意思:/ – Mathematics

+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類來代替,這會減輕你有一個圖形對象。

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

UPDATE:

您可以使用一個假的圖像使用圖形來衡量一個字符串,因爲我們不能在類庫使用的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); 
} 
+0

++ 1 @紅蛇,對不起,我忘了提 - 我需要它在一個庫類 – Mathematics

+0

@CustomizedName更新了答案的類庫 –