2011-10-10 56 views
8

我需要建立一個類庫,一個字符串並將此字符串特定字體的功能則得到字符串的寬度如何得到一個字符串寬度

所以,我怎麼能得到串邊界寬度?

+0

可以與此合併:http://stackoverflow.com/questions/5553965/programmatically-measure-string-in-asp-net – digEmAll

+0

測量網站的字符串的大小聽起來有問題。無法確定瀏覽器將顯示字體AFAIK的大小。 – davisoa

+0

一個特定的字體不足以知道這一點。您還需要知道哪個渲染器將顯示文本。例如,Apple和MS渲染文本的方式非常不同,如果影響文本的圖形寬度,我不會感到驚訝。如果你試圖在服務器端獲得html中顯示的文本寬度(因爲你的標籤似乎暗示),這很可能是不可能的。 – CodesInChaos

回答

12

您可以得到一個Graphics對象(使用Control.CreateGraphics()在您想要的文本的容器上),並請撥打MeasureString()來執行此操作。這是一種相當常見的GDI + 技術。

從MSDN的更多信息:http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

+0

AFAIK GDI +文本測量有點問題。特別是當使用大小來居中文本不符合要求時。 – CodesInChaos

+0

我使用'MeasureString'方法,現在我得到了一個SizeF類型的返回值,然後將它賦值給PointF,我現在知道寬度但是在PointF中>>>我需要它的cm!我嘗試轉換它,因爲我認爲PointF就像Postscript點,但我認爲我的轉換公式不正確,所以如何在得到poinf的寬度後進行轉換! – AshOoO

+1

'PointF'只是'Point'的一個'float'值(即非整數值)。從點轉換爲釐米應該是可行的(點 - >像素 - > dpi->英寸 - >釐米?),但爲什麼你需要釐米? –

14

另一種方式來做到這一點是具有TextRenderer,並調用MeasureString方法,並傳遞串和字體類型。

MSDN示例:

private void MeasureText1(PaintEventArgs e) 
{ 
    String text1 = "Measure this text"; 
    Font arialBold = new Font("Arial", 12.0F); 
    Size textSize = TextRenderer.MeasureText(text1, arialBold); 
    TextRenderer.DrawText(e.Graphics, text1, arialBold, 
     new Rectangle(new Point(10, 10), textSize), Color.Red); 
} 

注:這僅僅是一個替代的解決方案已經張貼由@Neil巴恩韋爾 的(同樣有效)一個(如果您已經有到系統的參考.Windows.Forms在你的項目中,這可能會更方便)。

+0

我認爲這只是在Windows應用程序不是類庫項目! – AshOoO

+1

@AshOoO我同意,這就是我的答案結尾處的註釋全是關於=) – jadarnel27

+1

這將測量當前表單上的文本大小。如果您需要在打印機輸出上測量文本大小,則需要使用'e.Graphics.MeasureString(...)'方法。 – AaA