Как выделить синтаксис в RichTextBox [С#]?

Как выделить подсветку синтаксиса в элементе управления richtextbox КАК ТИПЫ ПОЛЬЗОВАТЕЛЯ и ИСПОЛЬЗОВАНИЕ АЛЬТЕРНАТИВНЫХ [] ключевых слов. Я скоро опубликую легкий блокнот в Интернете, и я хочу, чтобы у него была подсветка синтаксиса. Я использую формы Windows. Может ли кто-нибудь отправить пример кода?

Ответ 2

Scintilla - отличный редактор исходного кода, который включает подсветку синтаксиса среди целого ряда других функций. Вы можете встроить его в свое приложение, и есть .NET wrapper.

С помощью Scintilla вы можете указать ключевые слова, и затем будет применяться подсветка синтаксиса по мере ввода.

Ответ 3

Используете ли вы WinForms или WPF?

Если WPF, вы можете посмотреть AvalonEdit. Он бесплатный и с открытым исходным кодом, и он используется в SharpDevelop (open source IDE).

Ответ 4

Вы можете изменить шрифт выбранных слов в richtextbox. Взгляните на свойства Select и SelectedFont элемента управления.

Но, по сути, вам нужно прокручивать слова, проверять, присутствует ли слово в ваших ключевых словах, а затем изменить шрифт, используя вышеупомянутые свойства.

Ответ 5

Не совсем ответ на ваш вопрос, но вы посмотрели компонент текстового редактора из SharpDevelop? Он довольно легкий (< 200kB IIRC), может быть легко встроен в приложения WinForms и имеет подсветку синтаксиса для нескольких встроенных языков.

В противном случае вы можете посмотреть эту страницу CodeProject. Он переформатирует RTF во время ввода, что не очень эффективно для больших файлов, и содержит несколько жужжащих блоков catch (Exception) { }, поэтому я не уверен, буду ли я использовать его в критическом для жизни приложении, но это определенно хорошей отправной точкой, чтобы увидеть, как это можно сделать.

Ответ 6

Выделение синтаксиса - непростая задача для эффективного выполнения. Многие решения, которые вы можете найти (например, те, которые связаны с модификацией RTF), являются одноразовым решением. Если вы хотите выделить и не выделять слова "на лету" во время издания, ваш код должен быть готов к этому. Я бы не стал изобретать велосипед и использовать ICSharp.TextEditor или так, чтобы решить вашу проблему.