gpt4 book ai didi

c# - 制作一个简单的搜索功能,使光标跳转到(或突出显示)要搜索的词

转载 作者:太空狗 更新时间:2023-10-29 22:15:17 24 4
gpt4 key购买 nike

我现在已经用了很长时间,试图找出一个问题,我认为这并不难。

这是交易:

我正在使用 C# 和 WPF 编写一个小型应用程序。

我有一个包含 FlowDocument 的 RichTextBox。

我在富文本框下方添加了一个小文本框和一个按钮。

然后用户输入他/她想要搜索的词,然后按下按钮。

然后富文本框将跳转到该词的第一次出现处。

只要 richTextBox 滚动到单词,它就足够了——它还可以选择、突出显示或将光标放在单词旁边——任何事情都可以。

继续按下按钮,将跳转到下一个出现的单词,以此类推,直到文档结束。

正如我所说 - 我认为这是一项简单的任务 - 但我在解决这个问题时遇到了严重的问题。

最佳答案

这应该可以完成工作:

public bool DoSearch(RichTextBox richTextBox, string searchText, bool searchNext)
{
TextRange searchRange;

// Get the range to search
if(searchNext)
searchRange = new TextRange(
richTextBox.Selection.Start.GetPositionAtOffset(1),
richTextBox.Document.ContentEnd);
else
searchRange = new TextRange(
richTextBox.Document.ContentStart,
richTextBox.Document.ContentEnd);

// Do the search
TextRange foundRange = FindTextInRange(searchRange, searchText);
if(foundRange==null)
return false;

// Select the found range
richTextBox.Selection.Select(foundRange.Start, foundRange.End);
return true;
}

public TextRange FindTextInRange(TextRange searchRange, string searchText)
{
// Search the text with IndexOf
int offset = searchRange.Text.IndexOf(searchText);
if(offset<0)
return null; // Not found

// Try to select the text as a contiguous range
for(TextPointer start = searchRange.Start.GetPositionAtOffset(offset); start != searchRange.End; start = start.GetPositionAtOffset(1))
{
TextRange result = new TextRange(start, start.GetPositionAtOffset(searchText.Length);
if(result.Text == searchText)
return result;
}
return null;
}

FindTextInRange 中 for() 循环的原因不幸的是 range.Text 去除了非文本字符,因此在某些情况下,IndexOf 计算的偏移量会稍微太低。

关于c# - 制作一个简单的搜索功能,使光标跳转到(或突出显示)要搜索的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com