удалить задний цвет из нескольких позиций в richTextBox - PullRequest
1 голос
/ 22 сентября 2011

У меня есть расширенное текстовое поле, и я реализовал опцию поиска для него. Когда пользователь ищет строку, все совпадения выделяются желтым фоном. Я хочу, чтобы при повторном нажатии пользователем кнопки поиска все предыдущие выделения были удалены до начала нового поиска.

Я нашел два способа сделать это: 1. выделите весь текст, а затем выберите задний цвет, который будет по умолчанию. 2. удалите весь текст из текстового поля и затем верните его снова.

Оба способа работают, но это не выглядит естественным, когда я их использую. Итак, есть ли другой способ удалить все блики из текста?

Я использую .NET Framework 4 и пишу на C #.

Ответы [ 5 ]

1 голос
/ 11 апреля 2012

Попробуйте этот код:

richTextBox1.SelectAll();
richTextBox1.SelectionBackColor = System.Drawing.Color.White;
richTextBox1.DeselectAll();

здесь белый цвет будет задним цветом текста, прежде чем он будет выделен желтым цветом

0 голосов
/ 10 марта 2019

Другое решение - взять строку RTF из свойства RTF RichTextBox и использовать Regex для замены тегов Color Table и Highlight.Затем вы можете взять раздетую строку и использовать ее в RichTextBox.Надеюсь, этот простой вспомогательный метод поможет кому-то ...

   public string StripRTFColor (string RTFString)
    {
        string result = "";

        //                      
        //STRIP COLOUR TABLES   
        //                      

        string regexSearchString = @"\{\\colortb.*\}\r\n";

        result = Regex.Replace(RTFString, regexSearchString, "");


        //                      
        //STRIP HIGHLIGHT TAG   
        //                      
        regexSearchString = @"\\highlight[\d]* ";

        result = Regex.Replace(result, regexSearchString, "");



        return result;
    }
0 голосов
/ 29 июня 2016

Существует очень простое решение для удаления нескольких экземпляров выделенных фрагментов, которые вы создали, без вмешательства со всеми остальными выделениями, другим форматированием и т. Д .:

Используйте уникальный цвет подсветки, который никто другой, вероятно, не будет использовать, например,

hColor as color = Color.FromArgb(255, 255, 1)

Затем, чтобы удалить все экземпляры выделений этого цвета из вашего расширенного текста:

Dim t As String = TextBox1.Rtf
t = t.Replace("\red255\green255\blue1;", "\red255\green255\blue255;")
TextBox1.Rtf = t

Это заменяет ваш специальный цвет подсветки тем же цветом, что и фон, в данном случае Color.FromArgb (255, 255, 255), без необходимости искать какие-либо выделенные слова или реализовывать любой другой код.

Пока, пока, выделите ...

0 голосов
/ 22 сентября 2011

вот идея, написанная на полу C # psedocode, надеюсь, она поможет

   List<Match> matches = new List<Match> { };


 void Highlight(string SearchString,Color highlightColor)
 {
 foreach (var match in matches)
 {
 UpdateMatchBgColor(richTextBox1,match.pos,match.length,match.color);
 }
 matches = SearchMatches(SearchString);

 foreach (var match in matches)
 {
 UpdateMatchBgColor(richTextBox1,match.pos,match.length,highlightColor);
 }

 }

РЕДАКТИРОВАТЬ: пробуя это: http://www.dotnetcurry.com/ShowArticle.aspx?ID=146 Edit2:

работает здорово!

0 голосов
/ 22 сентября 2011

Функциональность, которую вы ищете, это множественный выбор, что-то вроде:

richTextBox1.Select(4, 5);
richTextBox1.Select(29, 2);
richTextBox1.Select(95, 12);

, но все еще есть выбранные предыдущие варианты.

Плохие новости, потому что множественный выбор не построен-в функции в richTextBox, но я думаю, что вы можете сделать несколько трюков для достижения этой цели:

Выберите одну часть, выделите выделение (позже сделайте его нормальным, когда отмените выбор) и запишите индекс начала и конца части и тот жесо вторым и третьим и более ...

Надеюсь, это поможет

...