Я пишу пользовательскую замену элементов управления Textbox/Label. Он должен обеспечивать аналогичную функциональность, но будет оптимизирован и (надеюсь) намного быстрее в контексте моего приложения. Он должен поддерживать многострочный текст. Мне интересно, есть ли простой способ сделать выделенный текст? Прямо сейчас, похоже, единственный способ - это вычислить, где должен быть нарисован прямоугольник выделения, и нарисовать его вручную. Я надеялся получить рекомендации по наиболее простому способу выполнения этого или любых альтернативных методов. Благодарю.Как нарисовать выделенный текст
ответ
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) также связан с этой статьей.
Переназначение основных элементов управления для приложения является важной задачей и не должно выполняться, если только оно не является абсолютным последним (IMO). Если входящие в комплект элементы управления не соответствуют вашим исключениям, я бы рекомендовал приобрести стороннюю библиотеку управления, в которой их бизнес построен вокруг проектирования и поддержки этих элементов управления. У меня было много успехов, используя Telerik's Элементы управления ASP.NET. Я видел много положительных утверждений об их других строках элементов управления.
Существует также множество других источников контроля сторонних организаций, на которые вы могли бы обратить внимание.
- 1. Как нарисовать выделенный текст в win32, используя только вызов gdi?
- 2. Удалить выделенный/выделенный текст
- 3. Как получить выделенный текст?
- 4. Как найти выделенный текст?
- 5. Как чирикать выделенный текст?
- 6. Как редактировать выделенный текст в Openlayers3?
- 7. jQuery: как обернуть выделенный текст
- 8. Как сохранить текст, выделенный синтаксисом?
- 9. Очистить ComboBox выделенный текст
- 10. выделенный текст в iframe
- 11. sIFR выделенный текст фона
- 12. Выделенный текст из ComboBox
- 13. jQuery - изменить выделенный текст
- 14. Получить выделенный текст
- 15. Получить выделенный текст
- 16. обнаружить выделенный текст
- 17. jQuery установить выделенный текст
- 18. Выделенный текст в TextView
- 19. Google Chrome выделенный текст
- 20. Выделенный текст в Word
- 21. захватить текст, выделенный мышью
- 22. KDevelop: преобразовать выделенный текст?
- 23. Chrome Extension выделенный текст
- 24. Как я могу «нарисовать» маркер на текст?
- 25. выделенный текст цвет фона
- 26. UITextview выделенный текст
- 27. цикл через выделенный текст.
- 28. UiTextView перетащить выделенный текст
- 29. Awesomplete - получить выделенный текст
- 30. Остановить выделенный текст HTML
Нет никакого пользовательского UserControl, который вы создадите для этой цели, будет быстрее, чем встроенные элементы управления. Если вы действительно сталкиваетесь с проблемами производительности с текстовыми полями и ярлыками, скорее всего, у вас слишком много из них в вашей форме. – MusiGenesis
Я бы не сказал, что нет никакого способа, похоже, было бы очень трудно достичь, поэтому я рекомендовал посмотреть на другие сторонние элементы управления, поскольку компании, которые основывали свое существование на этом, скорее всего, найдут место для улучшение. –