Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
.NET 4.x

Цвет слова в строке другим цветом (richTextBox)

27.11.2016, 11:51. Показов 3800. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Уже ну пряяям кучу всего облазил и никак не могу найти нормального ответа.

Есть у меня richTextBox, в котором есть информация, к примеру:
C#
1
2
3
[11:44:19] [INFO] Информация
[11:44:14] [ERROR] Ошибка
[11:44:12] [INFO] Информация
Наверное, стоит упомянуть, что новая строка добавляется вверх, а не вниз элемента.
Так вот, собствеено, вопрос: как некоторые слова выделять цветом? ( [ERROR] - красный, [INFO] - синий )

Делал так:
C#
1
2
3
4
5
6
7
8
9
box.Text = text + "\r\n" + box.Text;
box.SelectionColor = box.ForeColor;
if ( color != null && find != null ){
    int my1stPosition = box.Find( find );
    box.SelectionStart = my1stPosition;
    box.SelectionLength = find.Length;
    Color colorNew = Color.FromName( color );
    box.SelectionColor = colorNew;
}
Но оно сбрасывает все цвета и устанавливает цвет на первом совпадении find
Делал еще так:
C#
1
2
3
4
5
6
7
8
9
10
box.Text = text + "\r\n" + box.Text;
if ( find != null ){
    string regExpr = @find;
    foreach (Match m in Regex.Matches( box.Text, regExpr)) {
        box.SelectionStart = m.Index;
        box.SelectionLength = m.Length;
        Color colorNew = Color.FromName( color );
        box.SelectionColor = colorNew;
    }
}
Оно то заменяет все find нужным цветом, но до этой замены оно снова же сбрасывает все цвета, что визуально выглядит не очень. К тому же, если информации будет очень много, то не думаю, что оно будет с легкостью итскать все совпадения
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.11.2016, 11:51
Ответы с готовыми решениями:

Найти в строке слова, начинающиеся и заканчивающиеся на заданные буквы, и выделить их другим цветом
Лабороторная работа по теме символьные строки.Задание такое:вручную вводится строка.надо найти в ней слова начинающиеся и заканчивающиеся...

RichEdit: выделить некоторые слова другим цветом (MFC)
Есть два едита, нужно будет из одного перегнать текст в другой по нажатию кнопки, притом если некоторые слова будут попадаться то...

Выделить цветом некоторые слова в RichTextBox
Здравствуйте. На форме имеется Ричбокс c текстом, в котором надо найти определенные слова(берутся из массива mystring) и выделить их...

8
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
27.11.2016, 15:33
Что-то очень сложно придумали)
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
        //< --для примера
        private void button1_Click(object sender, EventArgs e)
        {
            this.AddTextRTB("[11:44:19] [INFO] Информация");
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            this.AddTextRTB("[11:44:14] [ERROR] Ошибка");
        }
        //-->
 
 
        private String[] tags = { "[INFO]", "[ERROR]" };
        private Color[] tagColors = { Color.Blue, Color.Red };
        private void AddTextRTB(string text)
        {
 
            //добавление строки перед остальными
            Box.Select(0, 0);
            Box.SelectedText = text + "\r\n";
 
            int start;
 
            //перебираем теги, ищем совпадения в строке
            for (int i = 0; i < tags.Length; ++i)
            {
                start = text.IndexOf(tags[i]);
                if (start != -1)
                {
                    Box.Select(start, tags[i].Length);
                    Box.SelectionColor = tagColors[i];
                    break;
                }
            }
            //курсор в начало
            Box.Select(0, 0);
        }
1
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
27.11.2016, 17:33  [ТС]
Цитата Сообщение от Sklifosofsky Посмотреть сообщение
Что-то очень сложно придумали)
Да я можно сказать впервые работаю с RTB, очень много всего не знаю. Делал так:
C#
1
2
3
4
5
6
box.SelectionStart = 0;
box.SelectionLength = 0;
box.SelectedText = text+"\n";
box.SelectionStart = box.Text.IndexOf(find);
box.SelectionLength = find.Length;
box.SelectionColor = color;
Соответственно было 2 лишних аргумента с поисковым словом и цветом. Ваш вариант, наверное, подходит больше. Но как сделать, что б аргументом можно было еще задать закрашивание всей строки, а не только определенного слова?
0
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
27.11.2016, 17:43
То есть сначала закрасить строку потом определенное слово?
Ну наверное после вставки текста в RTB

добавить

C#
1
2
            Box.Select(0, text.Length);
            Box.SelectionColor = [ваш цвет];
1
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
27.11.2016, 17:46  [ТС]
Цитата Сообщение от Sklifosofsky Посмотреть сообщение
сначала закрасить строку потом определенное слово
Не. Я типом bool хочу сделать аргумент для функции, где будет указывать, закрышивавть или слово или строку целиком. Ваш код скоро опробую (сейчас чуть другим занят), но уже вижу, что должен работать)
0
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.11.2016, 08:42  [ТС]
Цитата Сообщение от Sklifosofsky Посмотреть сообщение
добавить
Сделал так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void AppendTextRTBWork( RichTextBox box, string text, bool allLine = false, string color = null ) {
    box.Select(0, 0);
    box.SelectedText = text + "\r\n";
    if ( !allLine ){
        String[] tags = { "[INFO]", "[ERROR]", "[OK]" };
        Color[] tagColors = { Color.Blue, Color.Red, Color.Green };
        int start;
        for (int i = 0; i < tags.Length; ++i) {
            start = text.IndexOf(tags[i]);
            if (start != -1) {
            box.Select(start, tags[i].Length);
        box.SelectionColor = tagColors[i];
        break;
        }
        }
    } else { 
        box.Select( 0, text.Length );
        Color colorNew = Color.FromName( color );
        box.SelectionColor = colorNew;
    }
    box.Select(0, 0);
}
Переменная allLine отвечает за закрашивание всей строки, а color - имя цвета. Но почему то оно теперь каждый раз закрашивает весь РТБ цветом, который был выставлен, хотя закрашивать всю строку я назначил только одному тексту
0
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
29.11.2016, 19:28
Лучший ответ Сообщение было отмечено maksam07 как решение

Решение

Это из-за унаследования. В конце добавил одну строку, которая установит нужные данные в начальную позицию
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        public static void AppendTextRTBWork(RichTextBox box, string text, bool allLine = false, string color = null)
        {
            box.Select(0, 0);
            box.SelectedText = text + "\r\n";
            if (!allLine)
            {
                String[] tags = { "[INFO]", "[ERROR]", "[OK]" };
                Color[] tagColors = { Color.Blue, Color.Red, Color.Green };
                int start;
                for (int i = 0; i < tags.Length; ++i)
                {
                    start = text.IndexOf(tags[i]);
                    if (start != -1)
                    {
                        box.Select(start, tags[i].Length);
                        box.SelectionColor = tagColors[i];
                        break;
                    }
                }
            }
            else
            {
                box.Select(0, text.Length);
                Color colorNew = Color.FromName(color);
                box.SelectionColor = colorNew;
            }
            box.Select(0, 0);
            box.SelectionColor = Color.Black; //установите как дефолтный. В RTB коде установится метка, что с этой точки у наследуется черный цвет
        }
1
1 / 1 / 1
Регистрация: 27.12.2012
Сообщений: 123
29.11.2016, 21:00  [ТС]
Цитата Сообщение от Sklifosofsky Посмотреть сообщение
Это из-за унаследования.
Как сложно программировать
Все отлично работает, благодарен)
0
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
29.11.2016, 22:30
Цитата Сообщение от maksam07 Посмотреть сообщение
Как сложно программировать
Да ладно не пугайтесь. Это только такие нюансы у RTB есть, больше вы ни где такого не встретите в компонентах .net
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.11.2016, 22:30
Помогаю со студенческими работами здесь

Вывести на экран содержимое файла с программой на С, подсвечивая другим цветом ключевые слова
Вывести на экран содержимое файла с программой на С, подсвечивая другим цветом ключевые слова.

Вывести на экран содержимое файла с программой на С, подсвечивая другим цветом ключевые слова.
Вывести на экран содержимое файла с программой на С, подсвечивая другим цветом ключевые слова. Не знаю как сравнивать является слово...

Как узнать цвет слова в richtextbox?
Это вообще реально?) Перерыл море инфы в нете но такого не где не нашёл. Хочу сделать что то типа своего редактора кода vb с подсветкой...

Вывести на экран пересечение множеств другим цветом. Выделить в каждой строке буквы этого пересечения
1)Создать 2 строки случайных заглавных букв длиной 60. Вывести на экран. 2)Под каждой строкой вывести множество букв, которые...

Изменить цвет конкретного слова во всем тексте richTextBox
Есть richTextBox, в нем есть слова &quot;test&quot; нужно сделать чтоб все слова &quot;test&quot; перекрасились в красный цвет таким кодом красит только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru