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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> RichTextBox, форматирование текста 
:(
    Опции темы
Fedia
Дата 3.11.2010, 02:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: нет
Всего: 13



В компоненте RichTextBox отображается текст типа:
Код

Ш1 11015/7/2008 010108 1/1 261 59558 171042
Ш3 1 261 400/435.6 
Ш6 13524/264 12675/10.78 12431/4.05 12509/20.71 
Ш7 102 435.6 1 80 280 
Ш8 1/755.243 4/102.254 13/491.7 14/71 15/39 16/439 94/235 
Ш12 13524/4450.16 13494/2698.6 12675/254.98 13817/11.44 12431/137.25 12509/596.14 12598/426.4 
Ш13 33/5 32/80 17/155
 
При помощи регулярных выражений определяю позиции нужных мне полей в этом тексте. Зная эти позиции мне необходимо выделить их в тексте (например другим цветом). Сложность заключается в том, что позиции поля в тексте не совпадают со смещением позиции относительно начала документа в RichTextBox.
Например, поле 261 в блоке Ш3 (вторая строка) начинается с 50-го символа в тексте и имеет длину 3 символа. Для выделения этого поля использую код:
Код

            TextPointer StartDocument = RichText.Document.ContentStart;
            TextPointer TextPointerFrom = StartDocument.GetPositionAtOffset(50);
            TextPointer TextPointerTo = StartDocument.GetPositionAtOffset(53);
            RichText.Selection.Select(TextPointerFrom, TextPointerTo);
            RichText.Selection.ApplyPropertyValue(Run.BackgroundProperty, new SolidColorBrush(Colors.Red));

но из-за того, что в RichTextBox позиции в тексте смещаются при переходе на новый параграф или когда внутри параграфа есть элемент Run, то выделяется не поле 261, а текст перед ним. Для выделения поля 261 приходится использовать позиции со смещением:
Код

            TextPointer StartDocument = RichText.Document.ContentStart;
            TextPointer TextPointerFrom = StartDocument.GetPositionAtOffset(54);
            TextPointer TextPointerTo = StartDocument.GetPositionAtOffset(57);
            RichText.Selection.Select(TextPointerFrom, TextPointerTo);
            RichText.Selection.ApplyPropertyValue(Run.BackgroundProperty, new SolidColorBrush(Colors.Red));

Есть ли возможность преобразовать позицию в тексте в позицию в RichTextBox? Иными словами из позиции 50 получить позиции 54. Сейчас я пробегаю по всем параграфам а внутри параграфов по Inlines для определения позиции. Но работает такой способ достаточно медленно при работе с большим количеством текста. 


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




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


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

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