2012-10-25 66 views
0

我有以下代碼來創建一個LabelPictureBoxMeasureString()不返回足夠的寬度

Label l = new Label(); 
l.Text = _name; 
l.Size = CreateGraphics().MeasureString(_name, l.Font).ToSize(); 
l.BackColor = Color.White; 

但標籤老是掉線的最後一個字符。如果我添加一個字符的電話:

l.Size = CreateGraphics().MeasureString(_name+".", l.Font).ToSize(); 

它工作正常,但這並不正確。

標籤中的文本之前似乎有一些空白,但Padding設置爲0.我該如何解決這個問題?

+1

你需要的大小的標籤? AutoSize屬性有什麼問題嗎?你最好不要使用標籤(因爲它在一個圖片框上,你可以直接畫到圖片框) –

+0

你是對的,'AutoSize'屬性工作正常。謝謝! –

+1

爲了將來的參考,Label控件需要TextRenderer.MeasureText(),因爲它使用TextRenderer.DrawText()繪製文本,而不是Graphics.DrawString()。 –

回答

3

不能使用AutoSize財產?

MeasureString是出了名不準確的,但通常它返回一個尺寸大於你所期望的:

的MeasureString方法是專爲個人使用的字符串,包括之前和之後的額外的少量空間字符串以允許懸垂字形。此外,DrawString方法調整字形點以優化顯示質量,並可能顯示比MeasureString報告的字符串更窄的字符串。要獲取適合佈局中相鄰字符串的指標(例如,在實現格式化文本時),請使用MeasureCharacterRanges方法或採用StringFormat的MeasureString方法之一,並傳遞GenericTypographic。另外,確保圖形的TextRenderingHint是AntiAlias。

http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

0

當你聲明你的字體與UI字體大小相比時,它的大小是錯誤的嗎?

+0

我不明白,你能詳細說一下嗎?我稍微更新了我的問題,以表明我之前創建了該標籤。 –

2

ToSize()將SizeF的值截斷爲下一個較小的整數值。

因此,爲了避免損失,你可以做這樣的事情:

l.Size = (CreateGraphics().MeasureString(_name, l.Font) + new SizeF(1, 0)).ToSize();