2008-08-21 29 views
6

Có phương pháp tự động nào để cắt xén chuỗi đường dẫn trong .NET không?Hiển thị đường dẫn trong nhãn

Ví dụ:

C:\Documents and Settings\nick\My Documents\Tests\demo data\demo data.emx 

trở thành

C:\Documents...\demo data.emx 

Nó sẽ là đặc biệt mát mẻ nếu điều này được xây dựng vào lớp Label, và tôi dường như nhớ lại nó là - không thể tìm thấy nó Tuy nhiên!

Trả lời

9

Sử dụng TextRenderer.DrawText với TextFormatFlags.PathEllipsis cờ

void label_Paint(object sender, PaintEventArgs e) 
{ 
    Label label = (Label)sender; 
    TextRenderer.DrawText(e.Graphics, label.Text, label.Font, label.ClientRectangle, label.ForeColor, TextFormatFlags.PathEllipsis); 
} 

Mã của bạn là 95% đó. Vấn đề chỉ là văn bản được cắt là được vẽ ở đầu văn bản là đã có trên nhãn.

Có, tôi đã biết điều đó. Ý định của tôi chỉ để chứng minh việc sử dụng phương thức DrawText. Tôi không biết bạn có muốn tạo sự kiện theo cách thủ công cho mỗi nhãn hay chỉ ghi đè phương thức OnPaint() trong nhãn được kế thừa. Cảm ơn bạn đã chia sẻ giải pháp cuối cùng của mình.

0

gì bạn đang suy nghĩ trên nhãn là nó sẽ đặt ... nếu nó dài hơn chiều rộng (chưa xác định kích thước tự động), nhưng đó sẽ là

c:\Documents and Settings\nick\My Doc... 

Nếu có sự ủng hộ, nó có lẽ sẽ nằm trong lớp Path trong System.IO

0

Bạn có thể sử dụng phương thức System.IO.Path.GetFileName và nối chuỗi đó vào một chuỗi System.IO.Path.GetDirectoryName được rút ngắn.

3

Không khó để viết cho mình mặc dù:

public static string TrimPath(string path) 
    { 
     int someArbitaryNumber = 10; 
     string directory = Path.GetDirectoryName(path); 
     string fileName = Path.GetFileName(path); 
     if (directory.Length > someArbitaryNumber) 
     { 
      return String.Format(@"{0}...\{1}", 
       directory.Substring(0, someArbitaryNumber), fileName); 
     } 
     else 
     { 
      return path; 
     } 
    } 

Tôi đoán bạn thậm chí có thể thêm nó như là một phương pháp mở rộng.

3

@lubos hasko Mã của bạn 95% ở đó. Vấn đề duy nhất là văn bản được cắt được vẽ trên đầu trang của văn bản đã có trên nhãn. Điều này dễ dàng được giải quyết:

Label label = (Label)sender; 
    using (SolidBrush b = new SolidBrush(label.BackColor)) 
     e.Graphics.FillRectangle(b, label.ClientRectangle); 
    TextRenderer.DrawText(
     e.Graphics, 
     label.Text, 
     label.Font, 
     label.ClientRectangle, 
     label.ForeColor, 
     TextFormatFlags.PathEllipsis); 
Các vấn đề liên quan