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

Joe*_*Joe 6 c# filenames textbox path winforms

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

Han*_*ant 15

是的,它是TextRenderer.DrawText()方法的内置功能.其中一个重载接受TextFormatFlags参数,您可以传递TextFormatFlags.PathEllipsis.对TextBox执行此操作是不合适的,用户无法合理地编辑这样的缩写路径,您可能不知道原始路径可能是什么.标签是最好的控件.

在项目中添加一个新类并粘贴下面显示的代码.编译.将新控件从工具箱顶部拖放到表单上.不要太小.

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);
  }
}
Run Code Online (Sandbox Code Playgroud)