C#WinForms-智能文本框控件,根据文本框宽度自动设置路径长度的格式

C#WinForms-智能文本框控件,根据文本框宽度自动设置路径长度的格式,c#,winforms,path,textbox,filenames,C#,Winforms,Path,Textbox,Filenames,是否存在可根据文本框宽度显示路径的智能文本框控件(WinForms)。例如,如果路径较短,它将显示整个路径(C:\myfile.txt),但如果路径较长,它将显示开始和结束(C:\SomeFolder…\foo\myfile.txt)。显示的字符长度应由文本框使用其宽度(动态)计算。欢迎任何商业或开源建议。非常感谢。是的,这是TextRenderer.DrawText()方法的内置功能。它的一个重载接受TextFormatFlags参数,您可以传递TextFormatFlags.PathElli

是否存在可根据文本框宽度显示路径的智能文本框控件(WinForms)。例如,如果路径较短,它将显示整个路径(C:\myfile.txt),但如果路径较长,它将显示开始和结束(C:\SomeFolder…\foo\myfile.txt)。显示的字符长度应由文本框使用其宽度(动态)计算。欢迎任何商业或开源建议。非常感谢。

是的,这是TextRenderer.DrawText()方法的内置功能。它的一个重载接受TextFormatFlags参数,您可以传递TextFormatFlags.PathEllipsis。对于文本框这样做是不合适的,用户无法合理地编辑这样一个缩写路径,您将不知道原始路径可能是什么。标签是最好的控件

向项目中添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖到窗体上。不要做得太小

using System;
using System.ComponentModel;
using System.Windows.Forms;

class PathLabel : Label {
  [Browsable(false)]
  public override bool AutoSize {
    get { return base.AutoSize; }
    set { base.AutoSize = false; }
  }
  protected override void OnPaint(PaintEventArgs e) {
    TextFormatFlags flags = TextFormatFlags.Left | TextFormatFlags.PathEllipsis;
    TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.ClientRectangle, this.ForeColor, flags);
  }
}

这太棒了!但是,当我将
图形设置为
SmoothingMode.AntiAlias
时,TextRenderer似乎并不认可它。