В основном я хочу сделать автозамену для моего языка. У меня есть RichTextBox (имя: MainText), где я пишу. во время записи программа должна каждое слово, если оно существует в файле словаря. если нет, тогда измените цвет c на красный. У него есть таймер. через каждую секунду он получает записанный текст и помещает слова в массив str, читает правильные слова из файла dictionary.txt и помещает их в список. при сравнении строк он никогда не выделяет неправильные слова и всегда имеет ошибки indexOutOfRange. Как это исправить?
Вот отметка таймера void:
void CheckTimer_Tick(object sender, EventArgs e)
{
List<string> correct_words = File.ReadAllLines(DictPath).ToList();
string text = MainText.Text;
string[] Words = text.Split(' ', '.');
for (int i = 0; i < Words.Length; i++)
{
if (correct_words.Contains(Words[i])) { }
else
{
int index = 0;
String temp = MainText.Text;
MainText.Text = "";
MainText.Text = temp;
while (index < MainText.Text.LastIndexOf(Words[i]))
{
MainText.Find(Words[i], index, MainText.TextLength, RichTextBoxFinds.None);
MainText.SelectionColor = Color.Red;
index = MainText.Text.IndexOf(Words[i], index) + 1;
}
}
}
}
Я также пробовал эту пустоту:
void HighlightPhrase(RichTextBox box, string phrase, Color color)
{
int pos = box.SelectionStart;
string s = box.Text;
for (int ix = 0; ;)
{
int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
if (jx < 0) break;
box.SelectionStart = jx;
box.SelectionLength = phrase.Length;
box.SelectionColor = color;
ix = jx + 1;
}
box.SelectionStart = pos;
box.SelectionLength = 0;
box.ForeColor = Color.Black;
}
Это сработало, если я дал ему конкретную c строку, но он не смог распознать ввод слов из словаря и выдал ошибку indexOutOfRange.