Помогите сделать 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 шт):
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