| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Организация выделения слов цветом в RitchTextBox |
| Автор: Экскалупатор 1.10.2009, 15:28 |
| Всем привет. суть проблемы. есть RitchTextBox, в него вводят текст, нужно этот текст выделять цветом по мере ввода. само выделение текста я сделал, вопрос в другом. как лучше организовать этот процесс с точки зрения архитектуры приложения? т.е. как реализовать процесс поиска слов и выделение их цветом, по какому событию, в отдельном потоке или в том же, и что бы все это не тормозило если будет много текста. |
| Автор: diadiavova 2.10.2009, 14:53 |
| Если речь о подсветке синтаксиса, то почему бы не воспользоваться готовым решением? Например таким http://code.google.com/p/alsing/ |
| Автор: Экскалупатор 2.10.2009, 15:32 |
| как всегда только Дядя Вова снизошел до ответа на мой вопрос. спасибо за внимание. готовое решение, это конечно, выход, но я хочу разобраться, как вообще подходить к таким задачам. я так понимаю, что мне нужно написать метод который будет принимать строку с текстом, искать в ней нужные слова. потом составлять новую строку, добавлять в нее всякие управляющие последовательности, и эту новую строку запихивать в контрол опять. и эту операцию нужно проводить при каждом срабатывании события KeyPress? или я что то пропустил? или все не так? подскажите плиз. |
| Автор: diadiavova 2.10.2009, 19:09 |
| В принципе существуют программы, в которых подсветка синтаксиса осуществляется с помощью ричтекстбокса(ей Богу не вру, сам видел), но вообще, на сколько я знаю это - не верный подход. Текстбоксы для подсветки пишутся ручками. То есть вся логика прорисовки текста ложится на разработчика. В качестве оупенсорс примера такой реализации можешь изучить коды эдитора из SharpDevelop IDE. Там эдитор наследуется от UserControl(кстати его тоже можно в своих прогах юзать). Если всё-таки нужно реализовать это через ричтекстбокс, то тут можно посоветовать не увлекаться спецэффектами и запускать окрашивание не по нажатию клавиши(любой) и не по изменению текста, а например по нажатию энтера. Выглядит не так круто, но вполне сносно. В офисе например, в среде редактирования макросов, такая логика до сих пор сохранилась. Если этого мало, то можно, конечно и в фоновом потоке подсвечивать оперативно при любом изменении текста, но тут ничего сказать не могу, если будут тормоза, я бы не удивился, хотя...как спроектировать наверно. По поводу способа подкрашивания текста, я когда-то делал какую-то небольшую программку, там мне надо было в ричтекстбоксе отображать результат обработки текста регулярным выражением и найденные соответствия подсвечивать. Никакого прямого вмешательства в RTF не было. Реализовал так: метод, отвечающий за окрашивание запоминал текущие значения SelectionStart и SelectionLength, после этого выделялось нужное слово, путём присвоения этим же свойствам новых значений, далее работал со свойством SelectionColor, после чего свойствам SelectionStart и SelectionLength возвращал исходные значения. Делал это в отдельном потоке, результат меня устроил. |
| Автор: Экскалупатор 2.10.2009, 19:15 |
| спасибо. буду думать. |
| Автор: jonie 5.10.2009, 22:08 |
| вот тут можно найти про подстветку с "нуля" (в C# все будет проще, конечно же): http://www.wasm.ru/article.php?article=1001035 |
| Автор: Экскалупатор 6.10.2009, 00:25 |
| jonie, спасибо, очень интересная статья. |