Member 14145167 Ответов: 1

Как сделать поиск текста в функции richtextbox, как функция поиска texteditors, на windows forms


мое решение найти и прокрутить до этого найденного текста, но он не выбирает все искомые слова
они выбирают только одно слово

Что я уже пробовал:

richTextBox1.Focus();
int start = richTextBox1.Text.IndexOf(textBox1.Text[0]);
int end = textBox1.Text.Length;
richTextBox1.Select(start, end);

1 Ответов

Рейтинг:
4

OriginalGriff

Строка.IndexOf находит только первое вхождение в строку, поэтому вам нужно повторить поиск, используя перегруженные методы.

public static class MyExtensions
    {
    public static List<int> AllIndexesOf(this string s, string lookFor)
        {
        List<int> indexes = new List<int>();
        int index = s.IndexOf(lookFor);
        int len = lookFor.Length;
        while (index >= 0)
            {
            indexes.Add(index);
            index = s.IndexOf(lookFor, index + len);
            }
        return indexes;
        }
    }
Найду их всех:
List<int> x = "abcdabceab".AllIndexesOf("abc");
вернет список из двух индексов.

Но... вы не можете выбрать более одной текстовой области - вам придется вручную (и временно) выделить их самостоятельно или предоставить функцию "Найти следующий", как это делают некоторые текстовые редакторы.


Member 14145167

Как создать функцию "Найти следующий"

OriginalGriff

Сохранив позицию "последний индекс" и выполнив поиск оттуда - аналогично тому, что было в моем коде.