![]() |
|
Модераторы: gambit, Partizan |
![]()
|
|
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
Всем привет. суть проблемы. есть RitchTextBox, в него вводят текст, нужно этот текст выделять цветом по мере ввода. само выделение текста я сделал, вопрос в другом. как лучше организовать этот процесс с точки зрения архитектуры приложения? т.е. как реализовать процесс поиска слов и выделение их цветом, по какому событию, в отдельном потоке или в том же, и что бы все это не тормозило если будет много текста.
|
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
Если речь о подсветке синтаксиса, то почему бы не воспользоваться готовым решением? Например таким
http://code.google.com/p/alsing/ -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
как всегда только Дядя Вова снизошел до ответа на мой вопрос. спасибо за внимание.
готовое решение, это конечно, выход, но я хочу разобраться, как вообще подходить к таким задачам. я так понимаю, что мне нужно написать метод который будет принимать строку с текстом, искать в ней нужные слова. потом составлять новую строку, добавлять в нее всякие управляющие последовательности, и эту новую строку запихивать в контрол опять. и эту операцию нужно проводить при каждом срабатывании события KeyPress? или я что то пропустил? или все не так? подскажите плиз. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 16 Всего: 142 |
В принципе существуют программы, в которых подсветка синтаксиса осуществляется с помощью ричтекстбокса(ей Богу не вру, сам видел), но вообще, на сколько я знаю это - не верный подход. Текстбоксы для подсветки пишутся ручками. То есть вся логика прорисовки текста ложится на разработчика. В качестве оупенсорс примера такой реализации можешь изучить коды эдитора из SharpDevelop IDE. Там эдитор наследуется от UserControl(кстати его тоже можно в своих прогах юзать).
Если всё-таки нужно реализовать это через ричтекстбокс, то тут можно посоветовать не увлекаться спецэффектами и запускать окрашивание не по нажатию клавиши(любой) и не по изменению текста, а например по нажатию энтера. Выглядит не так круто, но вполне сносно. В офисе например, в среде редактирования макросов, такая логика до сих пор сохранилась. Если этого мало, то можно, конечно и в фоновом потоке подсвечивать оперативно при любом изменении текста, но тут ничего сказать не могу, если будут тормоза, я бы не удивился, хотя...как спроектировать наверно. По поводу способа подкрашивания текста, я когда-то делал какую-то небольшую программку, там мне надо было в ричтекстбоксе отображать результат обработки текста регулярным выражением и найденные соответствия подсвечивать. Никакого прямого вмешательства в RTF не было. Реализовал так: метод, отвечающий за окрашивание запоминал текущие значения SelectionStart и SelectionLength, после этого выделялось нужное слово, путём присвоения этим же свойствам новых значений, далее работал со свойством SelectionColor, после чего свойствам SelectionStart и SelectionLength возвращал исходные значения. Делал это в отдельном потоке, результат меня устроил. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
спасибо. буду думать.
|
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
вот тут можно найти про подстветку с "нуля" (в C# все будет проще, конечно же): http://www.wasm.ru/article.php?article=1001035
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 2 Всего: 24 |
jonie, спасибо, очень интересная статья.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Разработка Windows Forms | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |