2010-03-07 17 views
6

पर आधारित स्मार्ट टेक्स्टबॉक्स नियंत्रण स्वत: प्रारूपित करने के लिए नियंत्रण एक स्मार्ट टेक्स्टबॉक्स नियंत्रण (WinForms) मौजूद है जो टेक्स्टबॉक्स चौड़ाई के आधार पर पथ प्रदर्शित कर सकता है। उदाहरण के लिए, यदि पथ छोटा है तो यह संपूर्ण पथ (सी: \ myfile.txt) प्रदर्शित करेगा, लेकिन यदि पथ लंबा है तो यह प्रारंभ और अंत प्रदर्शित करेगा (सी: \ SomeFolder ... \ foo \ MyFile.txt)। प्रदर्शित वर्णों की लंबाई को इसकी चौड़ाई का उपयोग करके टेक्स्टबॉक्स द्वारा गणना (गतिशील रूप से) की जानी चाहिए। कोई भी वाणिज्यिक या ओपन सोर्स सुझाव स्वागत है। आपका बहुत बहुत धन्यवाद।सी # WinForms - टेक्स्टबॉक्स चौड़ाई

उत्तर

15

हां, यह TextRenderer.DrawText() विधि की अंतर्निहित क्षमता है। इसके अधिभारों में से एक टेक्स्टफॉर्मैटफ्लग्स तर्क स्वीकार करता है, आप 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); 
    } 
} 
+0

+1 हंस! यही वह है जिसकी तलाश में मैं हूं! :) –

+0

यह बहुत अच्छा है! हालांकि, जब मैं 'ग्राफिक्स' को 'SmoothingMode.AntiAlias' पर सेट करता हूं, तो टेक्स्ट रेन्डरर इसका सम्मान नहीं करता है। – petejamd

संबंधित मुद्दे