【问题标题】: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 类中会特别酷,我似乎记得它是——但找不到它!

【问题讨论】:

    标签: c# .net winforms path


    【解决方案1】:

    TextRenderer.DrawTextTextFormatFlags.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 字符串。

            【讨论】:

              猜你喜欢
              • 2018-12-20
              • 2013-09-10
              • 2017-12-29
              • 2014-09-26
              • 2020-03-02
              • 2019-09-19
              • 2022-01-26
              • 2011-06-01
              • 1970-01-01
              相关资源
              最近更新 更多