是否有任何自动方法在.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);