FastColoredTextBox — божественный RichTextBox для .NET



Появилась у меня недавно задачка сделать в WPF-приложении красивый редактор форматированного текста с определённой логикой обработки. И решил я использовать для этой задачи стандартный RichTextBox. Увы, практика показала, что этот контрол ужасно медленный. Можно было, конечно, написать свою реализацию, но это занятие долгое, а функционал нужно было прикрутить побыстрее. Первая мысль была захостить стандартный RichTextBox из WinForms. Он работает достаточно быстро, но его функционала мне не хватило. И тогда я пустился в поиск сторонних контролов. Каким же счастливым я стал, когда наткнулся на FastColoredTextBox! Изучение контрола лучше всего начать со статьи на CodeProject. Увы, NuGet-пакет автор по каким-то причинам делать не хочет, но зато есть исходники на GitHub. Итак, небольшой обзор.

Главным образом, автор библиотеки (Павел Торгашов) ориентировал его на работу с программным кодом, но разработанный контрол прекрасно подходит для любых других задач. В WinForms его можно использовать в чистом виде, а в WPF приложение его легко добавить даже прямо через XAML. Скорость работы впечатляет (отличный performance был основной задачей автора), рендеринг происходит на основе GDI+. В рамках одного контрола поддерживается 16 стилей, но, как говорит автор, если вам нужно больше, то вы делаете что-то не так. Распространяется под LGPLv3, а значит можно использовать в проприетарном софте. Есть chm-документация, но больше толку от оригинальной статьи и demo-проекта Tester из репозитория, который содержит большое количество примеров на все случаи жизни:

Выводы

За свою жизнь я поработал с очень большим количеством разных контролов и могу авторитетно заявить: FastColoredTextBox реализован очень грамотно. В большинстве случаев, когда мне нужно было какое-нибудь свойство, то я задавал себе простой вопрос: «Если бы я был этим свойством, то как бы я назывался?». Первый пришедший в голову ответ вместе с intellisense помогали быстро найти нужную функциональность. Некоторые особенности, которые понравились лично мне:

  • Контрол работает ну очень быстро
  • Отличное API, XML-документация и demo-приложение
  • Продвинутая подсветка любого синтаксиса на основе регулярных выражений
  • Интерактивное выделение некоторых частей, в зависимости от позиции курсора
  • Возможность определять свои стили, в которых можно написать собственную отрисовку каждого символа через обычный Graphics
  • Свёртка блоков текста
  • Навигация по тексту, закладки
  • Autocomplete
  • Встроенные в тело документа Hint-ы и всплывающие ToolTip-ы
  • Запись макросов
  • Поддержка стандартных горячих клавиш (с возможностью назначить свои) и работы с буфером
  • Хранение истории, нормальный ChangeTracker с операциями Undo/Redo
  • Экспорт в HTML
  • .NET Framework 2.0 и поддержка Compact Framework
Поделиться:
Исходный код поста находится на GitHub:
https://github.com/AndreyAkinshin/aakinshin.net/blob/master/ru/_posts/dotnet/fastcoloredtextbox.md