Для справки, этот код взят из ответа на этот вопрос:
Выделить слово или фразу цветом, отличным от всех других выделений в тексте RichTextBox?
using System.Collections.Generic;
using System.Drawing;
using System.Text.RegularExpressions;
using System.Windows.Forms;
private class TextSearcher
{
private BindingSource m_bsMatches = null;
private RichTextBox m_Rtb = null;
public TextSearcher(RichTextBox rtb) : this(rtb, Color.Yellow, Color.Red) { }
public TextSearcher(RichTextBox rtb, Color selectionColor, Color currentColor)
{
this.m_Rtb = rtb;
SelectionColor = selectionColor;
CurrentColor = currentColor;
}
public string CurrentKeywords { get; private set; } = string.Empty;
public bool CaseSensitive { get; set; } = true;
public int CurrentIndex => m_bsMatches.Position;
public Match CurrentMatch => (Match)m_bsMatches.Current;
public MatchCollection Matches { get; private set; }
public Color SelectionColor { get; set; }
public Color CurrentColor { get; set; }
public void GotoMatch(int position)
{
SelectText(false);
this.m_bsMatches.Position = Math.Max(Math.Min(this.m_bsMatches.Count, position), 0);
SelectText(true);
}
public void NextMatch()
{
SelectText(false);
if (this.m_bsMatches != null && m_bsMatches.Position == this.m_bsMatches.Count - 1)
{
this.m_bsMatches.MoveFirst();
}
else
{
this.m_bsMatches.MoveNext();
}
SelectText(true);
}
public void PreviousMatch()
{
SelectText(false);
if (this.m_bsMatches != null && this.m_bsMatches.Position > 0)
{
this.m_bsMatches.MovePrevious();
}
else
{
this.m_bsMatches.MoveLast();
}
SelectText(true);
}
public int Search(string keywords)
{
if (CurrentKeywords.Equals(keywords)) return Matches.Count;
this.m_bsMatches?.Dispose();
CurrentKeywords = keywords;
var options = RegexOptions.Multiline |
(CaseSensitive ? RegexOptions.IgnoreCase : RegexOptions.None);
Matches = Regex.Matches(this.m_Rtb.Text, keywords, options);
if (Matches != null)
{
this.m_Rtb.SelectAll();
this.m_Rtb.SelectionColor = this.m_Rtb.ForeColor;
this.m_Rtb.SelectionStart = 0;
this.m_bsMatches = new BindingSource(Matches, null);
SelectKeywords();
return Matches.Count;
}
return 0;
}
private void SelectKeywords()
{
foreach (Match m in Matches)
{
SelectText(false);
NextMatch();
}
this.m_bsMatches.MoveFirst();
}
private void SelectText(bool current)
{
this.m_Rtb.Select(CurrentMatch.Index, CurrentMatch.Length);
this.m_Rtb.SelectionColor = current ? CurrentColor : SelectionColor;
}
}
Использование:
numericUpDown1.Maximum = rbsearcherhl.Search(textBox1.Text);
Например, текст в textBox1 - "System"
, но в моем поиске, когда вы хотите найти несколько слов, вы добавляете ,,
, например System,,public
или system,,public,,World
но в функции поиска в вызовах TextSearcher для поиска нескольких слов используется символ |
Как я могу изменить в поисковике, чтобы символ был например мой ,,
?
В этом примере для поиска нескольких слов вы вводите System|using
, но вместо этого я хочу искать несколько слов с помощью набрав System,,using
или System,,using,,public,,World
Вместо |
как использовать ,,