создание простой поисковой функции, создание курсора перейти к (или выделение) слово, которое разыскивается

Одна проблема ТОЛЬКО с закрытием соединения а не набора результатов, то, что, если бы Ваш код управления соединениями использует организацию пула подключений, эти connection.close(), просто отложил бы соединение в пуле. Кроме того, некоторая база данных имеет ресурс курсора на сервере, который не будет освобожден правильно, если это не будет явно закрыто.

5
задан Max 5 February 2014 в 16:30
поделиться

1 ответ

Это должно сработать:

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;
}

Причина цикла for () в FindTextInRange К сожалению, range.Text удаляется нетекстовые символы, поэтому в некоторых случаях смещение, вычисленное IndexOf, будет немного слишком маленьким.

13
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: