2009-08-27 4 views
4

Я пишу пользовательскую замену элементов управления Textbox/Label. Он должен обеспечивать аналогичную функциональность, но будет оптимизирован и (надеюсь) намного быстрее в контексте моего приложения. Он должен поддерживать многострочный текст. Мне интересно, есть ли простой способ сделать выделенный текст? Прямо сейчас, похоже, единственный способ - это вычислить, где должен быть нарисован прямоугольник выделения, и нарисовать его вручную. Я надеялся получить рекомендации по наиболее простому способу выполнения этого или любых альтернативных методов. Благодарю.Как нарисовать выделенный текст

+2

Нет никакого пользовательского UserControl, который вы создадите для этой цели, будет быстрее, чем встроенные элементы управления. Если вы действительно сталкиваетесь с проблемами производительности с текстовыми полями и ярлыками, скорее всего, у вас слишком много из них в вашей форме. – MusiGenesis

+0

Я бы не сказал, что нет никакого способа, похоже, было бы очень трудно достичь, поэтому я рекомендовал посмотреть на другие сторонние элементы управления, поскольку компании, которые основывали свое существование на этом, скорее всего, найдут место для улучшение. –

ответ

2

System.Windows.Forms.TextRenderer.

Просто переопределяют методы из System.Windows.Forms.Control:

protected override void OnPaint(PaintEventArgs e) 
{ 
    TextRenderer.DrawText(e.Graphics, Text, Font, new Rectangle(0, 0, Width, Height), ForeColor); 
} 

public override Size GetPreferredSize(Size proposedSize) 
{ 
    return TextRenderer.MeasureText(Text, Font); 
} 

Конечно, вам нужно обрабатывать несколько больше событий, таких как OnFontChanged или OnSizeChanged, если вам нужно нестандартное поведение реализовано.

Если вы ищете таргетинг на определенный текст (выделенный текст) в этих элементах управления, вы можете взглянуть на это article. Исходный код библиотеки проверки орфографии (SharpSpell) также связан с этой статьей.

0

Переназначение основных элементов управления для приложения является важной задачей и не должно выполняться, если только оно не является абсолютным последним (IMO). Если входящие в комплект элементы управления не соответствуют вашим исключениям, я бы рекомендовал приобрести стороннюю библиотеку управления, в которой их бизнес построен вокруг проектирования и поддержки этих элементов управления. У меня было много успехов, используя Telerik's Элементы управления ASP.NET. Я видел много положительных утверждений об их других строках элементов управления.

Существует также множество других источников контроля сторонних организаций, на которые вы могли бы обратить внимание.

Смежные вопросы