среда, 17 июля 2013 г.

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

Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/dotnet/fastcoloredtextbox/.


Появилась у меня недавно задачка сделать в 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

1 комментарий:

  1. Да отличная вещь недавно спрашивал автора на codeproject по поводу навигационной панели для кода как в SublimeText. Если возможно такое будет сделать, - Это будет БОМБА.
    И рулетку прикрутить так же моя просьба была, Вернее я сперва сам её вкрутил внутрь FastColoredTextBox, получилось коряво с отступами. Но Павел решил проблему. Видно сразу у кого какие руки, но конечно опыта у меня просто нет. Учится нет времени.
    Ещё хочется использовать кнопку разделителя в VerticalScrollBox, но это возможно если использовать штатные Скроллы и это приведёт к корявости.

    ОтветитьУдалить