winforms 如何在C#中实现“查找关键字”窗口窗体中的“搜索上一个”

cyej8jka  于 2023-06-06  发布在  C#
关注(0)|答案(1)|浏览(216)

在我的C#应用程序中有一个日志窗口。我在表单中实现了一个查找关键字功能,它可以搜索RichTextBox中所有匹配的文本。现在我想构建一个功能来搜索RichTextBox中的Next和Previous匹配项。
FindNext的代码是

try
{
    if (start_search_point < log_textbox.Text.Length && start_search_point != -1)
    {
        log_textbox.SelectionBackColor = highlight_all_color;
        log_textbox.Find(search_keyword, start_search_point, RichTextBoxFinds.WholeWord);
        log_textbox.SelectionBackColor = Color.Honeydew;

        if (start_search_point + search_keyword.Length < log_textbox.Text.Length)
            start_search_point = log_textbox.Text.IndexOf(search_keyword, start_search_point + search_keyword.Length);
        else
            start_search_point = 0;
    }
    else
    {
        start_search_point = 0;
    }
}
catch (Exception ex)
{
    MDIParent.thisMdiObj.txtLog.Invoke(new Action(() => MDIParent.thisMdiObj.txtLog.AppendText(DateTime.Now.ToString() + " : " + ex.Message + "=>" + ex.StackTrace.ToString() + Environment.NewLine)));
}

有人能帮我处理FindPrevious部分吗?我不明白这其中的逻辑。

knsnq2tg

knsnq2tg1#

如何创建MatchCollection并使用它?

MatchCollection matches = new Regex().Matches(search_keyword);

int currentIndex = 0;

然后使用currentIndex从集合中获取元素-

if(currentIndex > 0) --currentIndex;   // get previous search result
matches[currentIndex];

示例:x1c 0d1x

相关问题