标签中的路径显示

时间:2008-08-21 16:38:30

标签: c# .net winforms path

是否有任何自动方法可以在.NET中修剪路径字符串?

例如:

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

变为

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

如果将它内置到Label类中会特别酷,而我似乎记得它 - 虽然找不到它!

5 个答案:

答案 0 :(得分:9)

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()方法。感谢您分享最终解决方案。

答案 1 :(得分:4)

@ 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);

答案 2 :(得分: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;
        }
    }

我想您甚至可以将其添加为扩展方法。

答案 3 :(得分:0)

你在标签上的想法是它会......如果长度超过宽度(未设置为自动尺寸),那就是

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

如果有支持,它可能会在System.IO

中的Path类上

答案 4 :(得分:0)

您可以使用System.IO.Path.GetFileName方法并将该字符串附加到缩短的System.IO.Path.GetDirectoryName字符串。