【发布时间】:2020-03-21 11:22:33
【问题描述】:
基本上我想为我的语言进行自动更正。我有一个 RichTextBox(名称:MainText),我在其中写作。在编写过程中,如果每个单词都存在于字典文件中,程序就会对其进行处理。如果不是,则将特定单词颜色更改为红色。 它有一个计时器。每秒后,它会获取书面文本并将单词放入 str 数组,并从 dictionary.txt 文件中读取正确的单词并将它们放入列表中。在比较字符串期间,它从不突出显示不正确的单词,并且总是出现 indexOutOfRange 错误。如何解决?
这里是计时器滴答作废:
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:
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;
}
如果我给它一个特定的字符串,这会起作用,但它无法识别字典中的短语输入并给出 indexOutOfRange 错误。
【问题讨论】:
-
您是否尝试拆分字符串并逐字检查?