2010-03-07 50 views
6

智能文本框控件(WinForms)是否存在,可以根據文本框寬度顯示路徑。例如,如果路徑很短,它將顯示整個路徑(C:\ myfile.txt),但是如果路徑很長,它將顯示開始和結束(C:\ SomeFolder ... \ foo \ MyFile.txt )。顯示的字符的長度應該由文本框使用其寬度來計算(動態)。歡迎任何商業或開源的建議。非常感謝你。C#WinForms - 智能文本框控件自動格式化基於文本框寬度的路徑長度

回答

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漢斯!這正是我所期待的! :) – 2011-03-24 16:27:39

+0

這太棒了!但是,當我將'Graphics'設置爲'SmoothingMode.AntiAlias'時,TextRenderer似乎並不尊重它。 – petejamd 2011-12-11 00:53:03

相關問題