سؤال

هل هناك أي التلقائي طرق لقطع مسار السلسلة .الشبكة ؟

على سبيل المثال:

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

يصبح

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

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

هل كانت مفيدة؟

المحلول

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

نصائح أخرى

@ لوبوس hasko التعليمات البرمجية الخاصة بك 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);

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

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

لا أعتقد أنك تستطيع أن تضيف إليها على أنها امتداد الأسلوب.

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

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

إذا كان هناك دعم ، فإنه من المحتمل أن يكون على طريق الطبقة في النظام.IO

هل يمكن استخدام النظام.IO.مسار.GetFileName طريقة إلحاق هذه السلسلة إلى نظام تقصير.IO.مسار.GetDirectoryName السلسلة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top