5

我目前正在使用具有查找选项的记事本。当您输入一个单词时,它会找到并突出显示它。我得到了它的工作,但我已经到达了一堵墙,我似乎无法通过我目前使用的方法来通过它。我目前正在将文本框中的所有单词用 ' ' 拆分,并将单词的长度相加,直到找到输入的搜索词,这样我就可以看到找到的单词到底在哪里,所以我可以突出显示它。

我现在遇到的问题是,由于我使用 split(' ') 来获取文本框中的每个单词,因此每当用户添加新行时,sp​​lit 的返回数组将是“wordOnFirstLine\r\nwordOnSecondLine”。因此,它们将被视为一个单词。我可以在文本框中找到一个单词并查看它的确切位置以便突出显示它的另一种方法是什么?

4

4 回答 4

2

我相信你正在寻找GetLineFromCharIndex(int)方法。传入单词中第一个字符的索引应该返回它的行号。

于 2013-05-18T16:45:53.037 回答
2

尝试将字符串拆分为

string splitstring = stringToSplit.Split(new char[] { ' ', '\n', '\r' });

它会在所有 '\n' 和 '\r' 字符之间为您提供一个空字符串,但该修复可能最接近您当前正在执行的操作。

于 2013-05-18T16:46:06.453 回答
0

你不应该用 ' ' 分割所有单词。您可以按句子('\n')拆分文本,然后对每个句子使用 IndexOf 来查找单词的出现。

于 2013-05-18T16:44:50.423 回答
0

不要分裂任何东西。创建一个潜在的大字符串数组是一种资源浪费。

只需 IndexOf (使用适当的大小写比较器)就可以为您提供整个文本框文本中第一个单词的位置

所以假设你在你写的记事本文本中搜索单词“answer”作为一个由空格分隔的单词

int pos = 0;
string searchText = " answer ";
pos = myNotePad.Text.IndexOf(searchText, pos, StringComparison.CurrentCulture.IgnoreCase);

现在选择字符串

if(pos > 0)
{
    myNotePad.Text.SelectionStart = pos + 1;
    myNotePad.Text.SelectionLength = searchText.Length - 2;
}

如果您保存变量 pos 的值,您还可以轻松实现 Find Next 功能

于 2013-05-18T17:00:28.417 回答