标签中的路径显示
Posted
技术标签:
【中文标题】标签中的路径显示【英文标题】:Path Display in Label 【发布时间】:2010-09-06 10:26:30 【问题描述】:.NET 中是否有任何自动修剪路径字符串的方法?
例如:
C:\Documents and Settings\nick\My Documents\Tests\demo data\demo data.emx
变成
C:\Documents...\demo data.emx
如果它被内置到 Label 类中会特别酷,我似乎记得它是——但找不到它!
【问题讨论】:
【参考方案1】:将 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()
方法。感谢您分享您的最终解决方案。
【讨论】:
【参考方案2】:@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);
【讨论】:
【参考方案3】:不过自己写也不难:
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;
我猜你甚至可以将它添加为扩展方法。
【讨论】:
【参考方案4】:您在标签上的想法是,如果它比宽度长(未设置为自动大小),它会放...,但那会是
c:\Documents and Settings\nick\My Doc...
如果有支持,它可能在 System.IO 中的 Path 类中
【讨论】:
【参考方案5】:您可以使用 System.IO.Path.GetFileName 方法并将该字符串附加到缩短的 System.IO.Path.GetDirectoryName 字符串。
【讨论】:
以上是关于标签中的路径显示的主要内容,如果未能解决你的问题,请参考以下文章