Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Организация выделения слов цветом в RitchTextBox 
:(
    Опции темы
Экскалупатор
Дата 1.10.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



Всем привет. суть проблемы. есть RitchTextBox, в него вводят текст, нужно этот текст выделять цветом по мере ввода. само выделение текста я сделал, вопрос в другом. как лучше организовать этот процесс с точки зрения архитектуры приложения? т.е. как реализовать процесс поиска слов и выделение их цветом, по какому событию, в отдельном потоке или в том же, и что бы все это не тормозило если будет много текста.
PM MAIL ICQ   Вверх
diadiavova
Дата 2.10.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



Если речь о подсветке синтаксиса, то почему бы не воспользоваться готовым решением? Например таким
http://code.google.com/p/alsing/


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 2.10.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



как всегда только Дядя Вова снизошел до ответа на мой вопрос. спасибо за внимание.
готовое решение, это конечно, выход, но я хочу разобраться, как вообще подходить к таким задачам. я так понимаю, что мне нужно написать метод который будет принимать строку с текстом, искать в ней нужные слова. потом составлять новую строку, добавлять в нее всякие управляющие последовательности, и эту новую строку запихивать в контрол опять. и эту операцию нужно проводить при каждом срабатывании события KeyPress? или я что то пропустил? или все не так? подскажите плиз.
PM MAIL ICQ   Вверх
diadiavova
Дата 2.10.2009, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



В принципе существуют программы, в которых подсветка синтаксиса осуществляется с помощью ричтекстбокса(ей Богу не вру, сам видел), но вообще, на сколько я знаю это - не верный подход. Текстбоксы для подсветки пишутся ручками. То есть вся логика прорисовки текста ложится на разработчика. В качестве оупенсорс примера такой реализации можешь изучить коды эдитора из SharpDevelop IDE. Там эдитор наследуется от UserControl(кстати его тоже можно в своих прогах юзать). 
Если всё-таки нужно реализовать это через ричтекстбокс, то тут можно посоветовать не увлекаться спецэффектами и запускать окрашивание не по нажатию клавиши(любой) и не по изменению текста, а например по нажатию энтера. Выглядит не так круто, но вполне сносно. В офисе например, в среде редактирования макросов, такая логика до сих пор сохранилась. Если этого мало, то можно, конечно и в фоновом потоке подсвечивать оперативно при любом изменении текста, но тут ничего сказать не могу, если будут тормоза, я бы не удивился, хотя...как спроектировать наверно.
По поводу способа подкрашивания текста, я когда-то делал какую-то небольшую программку, там мне надо было в ричтекстбоксе отображать результат обработки текста регулярным выражением и найденные соответствия подсвечивать. Никакого прямого вмешательства в RTF не было. Реализовал так: 
метод, отвечающий за окрашивание запоминал текущие значения SelectionStart и SelectionLength, после этого выделялось нужное слово, путём присвоения этим же свойствам новых значений, далее работал со свойством SelectionColor, после чего свойствам SelectionStart и SelectionLength возвращал исходные значения. Делал это в отдельном потоке, результат меня устроил.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Экскалупатор
Дата 2.10.2009, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



спасибо. буду думать.
PM MAIL ICQ   Вверх
jonie
Дата 5.10.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



вот тут можно найти про подстветку с "нуля" (в C# все будет проще, конечно же): http://www.wasm.ru/article.php?article=1001035


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Экскалупатор
Дата 6.10.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 2
Всего: 24



jonie, спасибо, очень интересная статья.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.