سؤال

إذا أعطيت Textrenderer.Measuretext بعض النصوص لقياس وعرضه لاستخدامه سيعود الارتفاع إلى الارتفاع لعرض هذا النص.

private static int CalculateHeight(string text, Font font, int width)
{
    Size size = TextRenderer.MeasureText(text, font, new Size(width, Int32.MaxValue), TextFormatFlags.NoClipping | TextFormatFlags.WordBreak);
    return size.Height;
}

إذا أعطيت هذا النص والعرض والارتفاع إلى LinkLabel، فسوف يعرض النص في العرض والارتفاع المزيف مع أي شيء مقطوع.

ومع ذلك، إذا وضعت رابطا في مجموعة LinkLabel.links، فسيقوم LinkLabel برسم النص مع ما يبدو أنه مزيد من التباعد قليلا بين الشخصيات وفي بعض الأحيان سيؤدي هذا إلى قص نهاية النص. هل هناك أي طريقة لمنع ذلك؟ لقد حاولت إضافة الحشو عندما يكون هناك رابط، ولكن لا توجد طريقة موثوقة لمعرفة مقدار ما ستكون هناك حاجة إلى مساحة أكبر. هل هناك أي طرق أخرى للقيام بذلك؟

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

المحلول

يجب عليك استخدامها Control.getPredESize. طريقة لحساب العرض أو الارتفاع اللازم للتحكم (LinkLabel في قضيتك). يجب عدم استخدام قياساتها لمثل هذه الأغراض، شرح أكثر تفصيلا يمكنك العثور عليه هنا (دقة Textrenderer.Measuretext النتائج.)

نصائح أخرى

اذا كان LinkLabel يحتوي على أكثر من رابط واحد، أو هناك أجزاء من النص والتي لا تكون في رابط، ثم يستخدم التحكم Graphics.DrawString/MeasureString بدلا من TextRenderer.DrawText/MeasureText. وبعد يمكنك بسهولة رؤيته في العمل بسهولة، أكبر الفرق في التقديم مع الرسالة L الصغيرة:

linkLabel1.Text = new string('l', 100); // 100 x small L
linkLabel1.LinkArea = new LinkArea(0, 50);
linkLabel2.Text = new string('l', 100); // 100 x small L 

Textrenderer.measuretext هو المجمع المدار ل drawtextex. API. تأتي القيمة التي تم إرجاعها من بنية LPRC. قد ترغب في إلقاء نظرة على هذا API لمزيد من التفاصيل.

أعتقد أنك يمكن أن تزيل النمط الذي يجعله يسطال. linkLabel.Styles.Add("text-decoration", "none"); ولكن بعد ذلك بالطبع لن يبدو وكأنه رابط. : - /

سيكون حل آخر هو إضافة الحشو بنفسك أعتقد.

int heightBefore = linkLabel.Height;
int fontHeight = CalculateHeight(linkLabel.Text, linkLabel.Font, linkLabel.Width);
int paddingHeight = heightBefore - fontHeight;
linkLabel.Font = otherFont;
linkLabel.Height = CalculateHeight(linkLabel.Text, otherFont, linkLabel.Width);
linkLabel.Height += paddingHeight;

ليس أجمل الحلول، لكنني أعتقد أنه يعمل.

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