2013-03-11 12 views

Odpowiedz

13

Jedną z opcji jest ustawienie Label.AutoEllipsis na true.

Ustaw AutoEllips na wartość true, aby wyświetlać tekst, który wykracza poza szerokość etykiety, gdy użytkownik przejdzie przez kontrolę za pomocą myszy. Jeśli AutoSize ma wartość true, etykieta zostanie powiększona, aby dopasować się do tekstu, a wielokropek nie pojawi się.

Musisz więc ustawić wartość AutoSize na wartość false. Wygląd elipsy zależy od stałej szerokości etykiety. AFAIK, musisz ręcznie obsługiwać zmiany tekstu, aby zależało od długości tekstu.

+2

Właściwie etykieta z autoSize wartość true pokaże wielokropek, jeśli jego wzrost jest ograniczony przez jego kontenera (ex: etykieta w komórce tableLayoutPanel) –

4

Moje rozwiązanie:

myLabel.text = Trim(someText, myLabel.Font, myLabel.MaximumSize.Width); 

public static string Trim(string text, System.Drawing.Font font, int maxSizeInPixels) 
{ 
    var trimmedText = text; 
    var graphics = (new System.Windows.Forms.Label()).CreateGraphics(); 
    var currentSize = Convert.ToInt32(graphics.MeasureString(trimmedText, font).Width); 
    var ratio = Convert.ToDouble(maxSizeInPixels)/currentSize; 
    while (ratio < 1.0) 
    { 
     trimmedText = String.Concat(
      trimmedText.Substring(0, Convert.ToInt32(trimmedText.Length * ratio) - 3), 
      "..."); 
     currentSize = Convert.ToInt32(graphics.MeasureString(trimmedText, font).Width); 
     ratio = Convert.ToDouble(maxSizeInPixels)/currentSize; 
    } 
    return trimmedText; 
}