Вы можете использовать метод IndexOf
, чтобы получить индекс одной строки в другой. Он принимает аргумент, который указывает, с чего начать поиск, поэтому вы можете постоянно вызывать его в al oop и просто увеличивать начальный индекс на каждой итерации. Если он возвращает -1
, это означает, что строка не была найдена, поэтому мы можем использовать ее как условие для l oop.
Например, этот метод принимает элемент управления RichTextBox
и string
для поиска, и он выделит все экземпляры текста для поиска в тексте RTB:
private static void HighlightText(RichTextBox rtb, string text, Color? highlight = null)
{
if (rtb == null || rtb.TextLength == 0 || text == null || text.Length == 0) return;
// Find the first index of the text
var index = rtb.Text.IndexOf(text);
var length = text.Length;
var color = highlight ?? Color.Red; // Use Red if no color was specified
// While we found a match
while (index > -1)
{
// Highlight it
rtb.SelectionStart = index;
rtb.SelectionLength = length;
rtb.SelectionColor = color;
// Then try to find the next index of the text (starting after the previous one)
index = rtb.Text.IndexOf(text, index + length);
}
}
Для примера использования отбросьте RichTextBox
, TextBox
и Button
управляйте формой и добавьте этот код к событию Button.Click
:
private void button1_Click(object sender, EventArgs e)
{
HighlightText(richTextBox1, textBox1.Text);
}
Вывод
![enter image description here](https://i.stack.imgur.com/WHIVS.png)
Обновление
Если вы хотите выделить несколько элементов одновременно, вы можете создать перегрузку метода, которая принимает массив строк и затем вызывает метод выше для каждого элемента в массиве:
private static void HighlightItems(RichTextBox rtb, string[] items, Color? highlight = null)
{
if (items == null || items.Length == 0) return;
foreach (var item in items)
{
HighlightText(rtb, item, highlight);
}
}
Пример способа вызова этого состоит в том, чтобы взять текст в textbox1
и разбить его на точку с запятой. Затем мы можем передать полученный массив в наш метод перегрузки:
private void button1_Click(object sender, EventArgs e)
{
// Un-highlight the text first
richTextBox1.SelectAll();
richTextBox1.SelectionColor = Color.Black;
// Call highlight with an array of strings created by
// splitting textbox1.Text on the ';' character
var multipleItems = textBox1.Text.Split(';');
HighlightItems(richTextBox1, multipleItems);
}
Выход
![enter image description here](https://i.stack.imgur.com/GJhP3.png)