2010-03-07 1 views
6

Существует ли элемент управления интеллектуальным текстовым полем (WinForms), который может отображать путь в зависимости от ширины текстового поля. Например, если путь короткий, он отобразит весь путь (C: \ myfile.txt), но если путь длинный, он отобразит начало и конец (C: \ SomeFolder ... \ foo \ MyFile.txt). Длина отображаемых символов должна вычисляться (динамически) текстовым полем с использованием его ширины. Любые коммерческие предложения или предложения с открытым исходным кодом приветствуются. Большое спасибо.C# WinForms - интеллектуальный элемент управления TextBox для автоматической форматирования длины пути на основе ширины текстового поля

ответ

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); 
    } 
} 
+0

+1 Ганс! это именно то, что я искал! :) –

+0

Это замечательно! Однако, когда я устанавливал 'Graphics' в' SmoothingMode.AntiAlias', TextRenderer, похоже, не уважает его. – petejamd