2008-08-21 16 views
6

में पथ प्रदर्शन .NET में पथ स्ट्रिंग को ट्रिम करने के लिए कोई स्वचालित तरीका है?लेबल

उदाहरण के लिए:

C:\Documents and Settings\nick\My Documents\Tests\demo data\demo data.emx 

हो जाता है

C:\Documents...\demo data.emx 

यह विशेष रूप से शांत हो सकता है अगर इस लेबल वर्ग में बनाया गया था, और मैं इसे याद है लगता है - नहीं कर सकते इसे खोजने हालांकि!

उत्तर

9

उपयोग TextRenderer.DrawTextसाथ TextFormatFlags.PathEllipsis झंडा

void label_Paint(object sender, PaintEventArgs e) 
{ 
    Label label = (Label)sender; 
    TextRenderer.DrawText(e.Graphics, label.Text, label.Font, label.ClientRectangle, label.ForeColor, TextFormatFlags.PathEllipsis); 
} 

आपका कोड 95% है। केवल समस्या यह है कि छिद्रित पाठ टेक्स्ट के शीर्ष पर खींचा गया है जो पहले से ही लेबल पर है।

हाँ धन्यवाद, मुझे इसके बारे में पता था। मेरा इरादा केवल DrawText विधि का उपयोग प्रदर्शित करना था। मुझे नहीं पता था कि आप प्रत्येक लेबल के लिए मैन्युअल रूप से ईवेंट बनाना चाहते हैं या विरासत में OnPaint() विधि को ओवरराइड करना चाहते हैं। यद्यपि आपका अंतिम समाधान साझा करने के लिए धन्यवाद।

0

क्या आप लेबल पर सोच रहे हैं कि यह डाल देंगे ... अगर यह चौड़ाई (ऑटो आकार के लिए सेट नहीं) से अधिक लंबी है, लेकिन यह

c:\Documents and Settings\nick\My Doc... 

होगा अगर वहाँ समर्थन है, यह शायद System.IO

0

पर आप सिस्टम क्लास पर होंगे। आप System.IO.Path.GetFileName विधि का उपयोग कर सकते हैं और उस स्ट्रिंग को एक संक्षिप्त सिस्टम.IO.Path.GetDirectoryName स्ट्रिंग में जोड़ सकते हैं।

3

कठिन नहीं अपने आप को हालांकि लिखने के लिए:

public static string TrimPath(string path) 
    { 
     int someArbitaryNumber = 10; 
     string directory = Path.GetDirectoryName(path); 
     string fileName = Path.GetFileName(path); 
     if (directory.Length > someArbitaryNumber) 
     { 
      return String.Format(@"{0}...\{1}", 
       directory.Substring(0, someArbitaryNumber), fileName); 
     } 
     else 
     { 
      return path; 
     } 
    } 

मुझे लगता है कि आप भी एक विस्तार पद्धति के रूप में जोड़ सकते हैं।

3

@lubos hasko आपका कोड 9 5% है। एकमात्र समस्या यह है कि छंटनी पाठ उस पाठ के शीर्ष पर खींचा जाता है जो पहले से ही लेबल पर है। यह आसानी से सुलझाया जाता है:

Label label = (Label)sender; 
    using (SolidBrush b = new SolidBrush(label.BackColor)) 
     e.Graphics.FillRectangle(b, label.ClientRectangle); 
    TextRenderer.DrawText(
     e.Graphics, 
     label.Text, 
     label.Font, 
     label.ClientRectangle, 
     label.ForeColor, 
     TextFormatFlags.PathEllipsis);