2012-04-18 44 views
2

我想測量字符串的長度爲像素單位。我在網上搜索了2天,但沒有運氣。最後,我幾分鐘前從博客中發現了一些代碼段,並對其進行了一些修改。這裏是我的功能:C#字符串測量

private void cmdMeasure_Click(object sender, EventArgs e) 
{ 
    Font fntStyle = new Font("Arial", 16, FontStyle.Regular, GraphicsUnit.Pixel); 
    Size textSize = TextRenderer.MeasureText(str2measure.Text, fntStyle); 
    MessageBox.Show(textSize.ToString()); 
} 

問:

什麼是16的單位?是em,pt還是GraphicsUnit枚舉的單位?我沒有真正得到由c#定義的描述,「單位參數指定的單位中的新字體的em尺寸」。

TextRenderer.MeasureText方法是否包含其度量中的字符之間的空格?

+3

繼文檔[here](http://msdn.microsoft.com/en-us/library/ms141987.aspx)和[here](http://msdn.microsoft.com/en-us/library /system.drawing.graphicsunit.aspx)顯示16以像素爲單位,因爲參數'GraphicsUnit.Pixel'被提供給Font構造函數。 – 2012-04-18 03:47:45

+0

由於GraphicsUnit.Pixel將會像素化,並且對於大多數字體來說意味着大寫字母W的高度。字符可以自然重疊,並且測量將返回最終大小,從左側到右側加上邊緣-填充。你也可以使用Graphics.MeasureCharacterRanges。 – SimpleVar 2012-04-18 03:52:41

+0

http://stackoverflow.com/questions/451903/how-can-i-convert-a-string-length-to-a-pixel-unit – 2012-04-18 03:56:30

回答

3

什麼是16的單位?是em,pt還是GraphicsUnit 枚舉的單位?我實際上沒有得到由c#定義的描述「 的em尺寸,單位參數指定單位中的新字體」。

正如其他人所說,它是像素,因爲你傳遞GraphicsUnit.Pixel。

TextRenderer.MeasureText方法在測量中包含 之間的空格嗎?

是的。它爲您提供圍繞整個文本塊的邊界框的尺寸。

+0

我試圖測量字符串「a」,它返回的寬度17和18的高度。那麼你是說寬度還是高度減去16等於邊界框的厚度? – ELM 2012-04-18 04:11:09

+0

17x18尺寸僅僅意味着在Arial屏幕上繪製的大小爲16字體的「a」將非常適合17x18矩形。把它看作是「用來」顯示文本的區域。 – Larsenal 2012-04-18 04:23:09

+0

17x18的單位是多少?那也是以像素爲單位嗎? – ELM 2012-04-18 06:11:11

1

TextRenderer.MeasureString確實考慮了空間。在你的例子中,數字16以像素爲單位。

雖然,我不確定你是否正確測量你的字符串。我認爲你需要從str2measure文本框讓你的字體:

Size textSize = TextRenderer.MeasureText(str2measure.Text, str2measure.Font); 
+0

我試圖改變str2measure.Text的font屬性,但函數返回相同結果。 – ELM 2012-04-18 04:13:24

0

答案Q1。僅當您傳遞GraphicsUnit時,它纔是像素。像素

Ans Q2。它正在考慮整個文本塊,無論什麼內容甚至是空白。