Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173

Подсветить весь найденный текст в richtextbox

16.10.2015, 18:38. Показов 1980. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Нужно в richtextbox подсветить желтым все найденные совпадения для слова. Пишу так:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void HighlightText(string word)
        {
            if (word == "")
            {
                return;
            }
 
            int s_start = richTextBoxReadMe.SelectionStart, startIndex = 0, index;
 
            while ((index = richTextBoxReadMe.Text.IndexOf(word, startIndex)) != -1)
            {
                richTextBoxReadMe.Select(index, word.Length);
                richTextBoxReadMe.SelectionBackColor = Color.Yellow;
 
                startIndex = index + word.Length;
            }
        }
Проблема в том, что при выполнении метода текстбокс прокручивается сверху-вниз. А мне нужно просто выделить желтым все совпадения и потом установить курсор на первом совпадении.

Подскажите, как это проще сделать?

Добавлено через 5 минут
Я нашел вот такой метод:

C#
1
2
[DllImport("user32.dll", EntryPoint = "LockWindowUpdate", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr LockWindow(IntPtr Handle);

Потом:

C#
1
2
3
4
5
6
7
//замораживаем интерфейс
LockWindow(this.Handle);
 
HighlightText(string "слово")
 
//отмораживаем обратно
LockWindow(IntPtr.Zero);
Может быть есть более изящный способ?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.10.2015, 18:38
Ответы с готовыми решениями:

При любой смене размера richTextBox-а растянуть текст на весь richTextBox
есть richTextBox нужно вывести текст и при любой смене размера richTextBox растянуть этот текст на весь richTextBox. текст может быть любой...

Считать весь текст из richTextBox
Помогите кто-нить, не получается, хочу считать и тут же записать в файл, перепробывал кучу вариантов - постоянно ошибки какие-то, то пустое...

Как в richTextBox записать весь текст, a не только его конец?
Всем доброго времени суток. C# изучаю не очень давно и не очень хорошо его знаю, поэтому прошу помочь. private void...

4
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
16.10.2015, 18:45
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void HighlightText(string word)
{
    if (word == "")
    {
        return;
    }
 
    int s_start = richTextBoxReadMe.SelectionStart, startIndex = 0, index;
    int firstIndex = -1;
    while ((index = richTextBoxReadMe.Text.IndexOf(word, startIndex)) != -1)
    {
        if (firstIndex == -1)
            firstIndex = index;
        richTextBoxReadMe.Select(index, word.Length);
        richTextBoxReadMe.SelectionBackColor = Color.Yellow;
 
        startIndex = index + word.Length;
    }
    richTextBoxReadMe.Focus();
    richTextBoxReadMe.Select(firstIndex, word.Length);
}
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
16.10.2015, 18:50  [ТС]
Даценд,

при этом варианте текст прокручивается! (если он достаточно длинный, чтобы в richtextbox был вертикальный скролл). Мне нужно, чтобы текст без прокрутки сразу устанавливался на первое найденное слово, а остальные слова ниже были подсвечены желтым.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
16.10.2015, 18:59
Suppir,
Текст скроллируется так, чтобы первое найденное и выделенное слово по возможности было в первой видимой строке. А Вам не нужно видеть это слово?
0
28 / 28 / 11
Регистрация: 08.08.2011
Сообщений: 1,173
16.10.2015, 19:12  [ТС]
Все верно - мне нужно видеть слово, но только скролл должен быть моментальным. У меня получается так, что слово где-то в конце файла, а скролл до него долго "ползет".

Добавлено через 1 минуту
Пока остановился на таком варианте:

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
[DllImport("user32.dll", EntryPoint = "LockWindowUpdate", SetLastError = true, CharSet = CharSet.Auto)]
private static extern IntPtr LockWindow(IntPtr Handle);
 
        private void HighlightText(string word)
        {
            LockWindow(this.Handle);
 
            if (word == "")
            {
                return;
            }
 
            int s_start = richTextBoxReadMe.SelectionStart, startIndex = 0, index;
            int iFirstOccurance = -1;
 
            while ((index = richTextBoxReadMe.Text.IndexOf(word, startIndex)) != -1)
            {
                if (iFirstOccurance == -1)
                    iFirstOccurance = index;
 
                richTextBoxReadMe.Select(index, word.Length);
                richTextBoxReadMe.SelectionBackColor = Color.Yellow;
 
                startIndex = index + word.Length;
            }
 
            //если что-нибудь нашли
            if (iFirstOccurance != -1)
                richTextBoxReadMe.SelectionStart = iFirstOccurance;
            else
                richTextBoxReadMe.SelectionStart = s_start;
 
            richTextBoxReadMe.SelectionLength = 0;
            richTextBoxReadMe.SelectionColor = Color.Black;
 
            LockWindow(IntPtr.Zero);
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.10.2015, 19:12
Помогаю со студенческими работами здесь

Проблема с RichTextbox (весь текст отображается в столбик)
Следующий код: rtfLog.text = fMainForm.rtfLog.text + Str(Now()) + '>' + NewMessage + vbCrLf rtfLog.SelStart =...

Как выделить весь текст в RichTextBox горячими клавишами?
Всем привет! Подскажите кто знает. Хочу в набранном тексте горячими клавишами ctrl+A выделить весь текст цветным фоном, чтобы потом делать...

Используя Find получить найденный текст
Доброго времен суток. Есть текст в ворде. Там вставки Игрок-1, Игрок-2, Игрок-3 и т.д. Задача менять слова Игрок-ХХ на разные имена. ...

Поиск текста в richtextbox1 и выделить найденный текст
поиск текста в richtextbox1 и выделить найденный текст

Как подсветить текст?
Есть у меня пару функций, которые возвращают две строки "Какие произведения писателей заставляются задуматься о великом?" ---...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru