2010-03-07 27 views
6

Metin kutusu genişliğine bağlı olarak bir yolu görüntüleyebilen bir akıllı metin kutusu denetimi (WinForms) var. Örneğin, yol kısasa, tüm yolu (C: \ myfile.txt) görüntüler, ancak yol uzunsa, başlangıç ​​ve bitiş görüntülenir (C: \ SomeFolder ... \ foo \ MyFile.txt). Görüntülenen karakterlerin uzunluğu, genişliği kullanılarak metin kutusu tarafından hesaplanmalıdır (dinamik olarak). Herhangi bir ticari veya açık kaynak önerisi kabul edilir. Çok teşekkür ederim.C# WinForms - Akıllı Metin Kutusu Denetimi Metin Kutusu genişliğini temel alan Yol uzunluğunu otomatik olarak biçimlendirme

cevap

15

Evet, TextRenderer.DrawText() yönteminin yerleşik bir özelliği. Aşırı yüklenmelerden biri bir TextFormatFlags argümanını kabul ediyor, TextFormatFlags.PathEllipsis'i geçebilirsiniz. Bunu bir TextBox için yapmak uygun değildir, kullanıcı kısaltılmış bir yolu makul bir şekilde düzenleyemez, orijinal yolun ne olabileceği hakkında hiçbir fikriniz olmazdı. Bir Etiket en iyi kontroldür.

Projenize yeni bir sınıf ekleyin ve aşağıda gösterilen kodu yapıştırın. Derleyin. Yeni kutuyu araç kutusunun üstünden formunuza bırakın. Çok küçük yapma.

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 Hans! Bu tam olarak aradığım şey! :) –

+0

Bu harika! Ancak, "Graphics" i "SmoothingMode.AntiAlias" olarak ayarladığımda, TextRenderer onu onurlandırıyor gibi görünmüyor. – petejamd