2013-03-11 37 views
6

Tôi có nhãn có thay đổi văn bản và tôi muốn nó là một dòng có độ dài cố định. Bất cứ khi nào văn bản dài hơn thì chiều dài nhãn, tôi muốn nó hiển thị bất cứ điều gì phù hợp với "..." ở cuối. Ví dụ:Làm cách nào để kiểm soát nhãn cắt ngắn chuỗi dài bằng dấu chấm lửng?

Some Very Long Text 

sẽ trông như thế:

Some Very Lon... 

Có ai biết làm thế nào để làm điều đó?

Trả lời

13

Một trong các tùy chọn là đặt Label.AutoEllipsis thành true.

Đặt AutoEllipsis thành true để hiển thị văn bản mở rộng vượt ra ngoài chiều rộng của Nhãn khi người dùng vượt qua điều khiển bằng chuột. Nếu AutoSize là true, nhãn sẽ phát triển để phù hợp với văn bản và dấu ba chấm sẽ không xuất hiện.

Vì vậy, bạn cần đặt AutoSize thành sai. Sự xuất hiện của dấu chấm lửng phụ thuộc vào chiều rộng cố định của nhãn. AFAIK, bạn cần phải xử lý các thay đổi văn bản theo cách thủ công để làm cho nó phụ thuộc vào độ dài văn bản.

+2

Trên thực tế một nhãn với AutoSize thiết lập là true sẽ hiển thị ellipsis nếu tăng trưởng của nó bị hạn chế bởi vật chứa nó (ví dụ: một nhãn trong một tế bào của một TableLayoutPanel) –

4

Giải pháp của tôi:

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; 
} 
Các vấn đề liên quan