是否有任何自動方法在.NET中修剪路徑字符串?標籤中的路徑顯示
例如:
C:\Documents and Settings\nick\My Documents\Tests\demo data\demo data.emx
成爲
C:\Documents...\demo data.emx
這將是特別涼爽,如果這是建立在標籤類,並且我似乎記得它是 - 不容找到它雖然!
是否有任何自動方法在.NET中修剪路徑字符串?標籤中的路徑顯示
例如:
C:\Documents and Settings\nick\My Documents\Tests\demo data\demo data.emx
成爲
C:\Documents...\demo data.emx
這將是特別涼爽,如果這是建立在標籤類,並且我似乎記得它是 - 不容找到它雖然!
使用TextRenderer.DrawText與TextFormatFlags.PathEllipsis標誌
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);
}
你的代碼是95%存在。唯一的 問題是在標籤上已經有 的文本頂部繪製的修剪文本是 。
是的,謝謝,我知道這一點。我的意圖僅僅是展示使用DrawText
方法。我不知道是否要爲每個標籤手動創建事件,或者只是在繼承標籤中覆蓋OnPaint()
方法。感謝您分享您的最終解決方案。
你在想什麼的標籤上是它將把...如果它比寬度(未設置自動大小)更長的時間,但是這將是
c:\Documents and Settings\nick\My Doc...
如果有支持,它可能位於System.IO中的Path類中
您可以使用System.IO.Path.GetFileName方法並將該字符串追加到縮短的System.IO.Path.GetDirectoryName字符串中。
不難寫自己雖然:
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;
}
}
我想你甚至可以將其添加爲一個擴展方法。
@lubos hasko你的代碼是95%。唯一的問題是修剪後的文本是在標籤上已有的文本的頂部繪製的。這很容易解決:
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);