如何找到文本框中单词的哪一行?

时间:2013-05-18 16:40:39

标签: c# winforms visual-studio-2010

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

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

尝试将字符串拆分为

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

假设您正在搜索“回答”这个词,并在您编写的记事本文本之前和之后用空格分隔

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功能