c# - للصف - مشاريع الفيجوال بيسك جاهزة




عرض المسار في التصنيف (4)

ليس من الصعب كتابة نفسك على الرغم من:

    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;
        }
    }

أعتقد أنك يمكن أن تضيف حتى كطريقة التمديد.

هل هناك أي طرق تلقائية لتقليم سلسلة مسار في .NET؟

فمثلا:

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

يصبح

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

سيكون باردا بشكل خاص إذا كان هذا بنيت في فئة التسمية، ويبدو لي أن أذكر أنه - لا يمكن العثور عليه على الرغم من!


ما كنت تفكر في التسمية هو أنه سيتم وضع ... إذا كان أطول من العرض (لم يتم تعيين حجم السيارات)، ولكن هذا سيكون

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

إذا كان هناك دعم، فإنه ربما يكون على فئة المسار في System.IO


استخدم 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() الأسلوب في التسمية الموروثة. شكرا لتقاسم الحل النهائي على الرغم من.


@ لوبوس هاسكو الرمز الخاص بك هو 95٪ هناك. والمشكلة الوحيدة هي أن النص المقلص يتم رسمه على أعلى النص الموجود بالفعل على الملصق. هذا حلها بسهولة:

    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);




path