2012-05-28 46 views
3

假設我在Panel內有Label。文字有時會大於Panel,但並非總是如此。我怎麼才能弄清楚我應該在「...」前面的文本的哪一部分,而不用硬編碼確切地說需要多少個字符,因爲每個字符的大小都不一樣。如何確定文字大於容器的位置「...」的位置

if (bigLabel.Width >= this.ClientRectangle.Width - 10) { 
    dotLabel.Location = new Point(this.ClientRectangle.Width - 10 - dotLabel.Width); 
} 
else { 
    dotLabel.Location = new Point(this.Width + 10, this.Height + 10); 
} 
+0

我試圖把附近有標籤的結束它上面第二個標籤「......」和我會檢查文字有多大,只有在另一個標籤的像素數大一些時才顯示,但這也會使其看起來截斷。就像在它上面會有一半的「B」和一個圓點一樣,我試着計算字符並將其分開,但有時不會佔用所有空間 – Oztaco

+0

請發佈您擁有的代碼,更準確地看待你的問題 –

+0

順便說一句,在這麼年輕的時代學習編程的榮譽,我希望我有! –

回答

8

把它放到TextRenderer.DrawText()中來找出它本身。指定TextFormatFlags.EndEllipsis選項。您會在this answer中找到代碼示例。

已經內置到Label控件中。將其AutoSize屬性設置爲False,並將AutoEllipis屬性設置爲True以自動完成。你會得到一個免費的工具提示,顯示缺少的文本。

+0

謝謝你的工作完美 – Oztaco

+0

作爲一個後續問題,是否有可能用其他的東西,如破折號取代3點,或者使用這種方法只有2個點? – Oztaco

+1

不,這個省略號是一個專用的Unicode字形,代碼點U + 2026。這意味着只有一件事,破折號和點是莫爾斯電碼,這意味着別的東西:) –

1

使用Graphics.DrawString方法(TextRenderer.DrawText是GDI方式,Graphics.DrawString - GDI +)。將StringFormat.Trimming屬性設置爲StringTrimming.EllipsisCharacter(EllipsisWord,EllipsisPath)。

0

如果使用Telerik的控制 - RadLabel,只有設置該屬性:

this.lblReferralTracking.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; 
this.lblReferralTracking.TextWrap = false; 
this.lblReferralTracking.UseCompatibleTextRendering = true;