Помогите сделать Replace для блокнота в С#

Вообщем, я сделал стандартный блокнот, осталось сделать Replace. я не стал делать отдельное окно для поиска и замены и использовал стандартный элемент управления textBox. По моей логике функция Replace должна видеть слово из textBox1 найти все совпадения из RichTextBox1(там находится весь текст фаила) и потом поменять все найденные слова на слово из textBox2. Я попытался использовать много вариантов, но ни один не работает, так как я новичек в программирование выходит я чего-то не знаю для того чтобы решить эту задачу. Если что, вот как я реализовал поиск:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        if (!String.IsNullOrEmpty(textBox1.Text))
        {
            string allText = RichTextBox1.Text;
            string searchStr = textBox1.Text;

            if (allText.Contains(searchStr))
            {
                if (index > allText.Length)
                {
                    index = 0;
                }
                int selectionLength = searchStr.Length;
                int indexStart = allText.IndexOf(searchStr, index);
                if (indexStart == -1)
                {
                    index = 0;
                    indexStart = allText.IndexOf(searchStr, index);
                }
                int indexEnd = indexStart + selectionLength;
                RichTextBox1.Focus();
                RichTextBox1.Select(indexStart, selectionLength);
                //RichTextBox1.BringToFront();
                RichTextBox1.Update();
                textBox1.Clear();
                index = indexStart + 1;
            }
        }
    }

}

index это глобальная переменная

Вот куда надо писать Replace:

private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
    
}

Ответы (1 шт):

Автор решения: aepot

RichTextBox на самом деле сложный контрол. Чтобы с ним что-то сделать и не потерять форматирование, надо постараться. В частности не следует изменять его .Text.

Давайте попробуем так:

if (textBox1.Text?.Length > 0 && textBox1.Text != textBox2.Text)
{
    while (RichTextBox1.Find(textBox1.Text) >= 0)
    {
        RichTextBox1.SelectedText = textBox2.Text;
    }
}

Сам не проверял, но судя по документации RichTextBox1.Find(textBox1.Text) находит и выделяет запрошенный текст. Так что для поиска можете использовать этот же вызов.

Документация: RichTextBox.Find

→ Ссылка