public List<Range> FindAll(string pattern)
{
RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase;
if (!cbRegex.Checked)
pattern = Regex.Escape(pattern);
if (cbWholeWord.Checked)
pattern = "\\b" + pattern + "\\b";
//
Range range = tb.Selection.Clone();
range.Normalize();
range.Start = range.End;
range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1);
//
List<Range> list = new List<Range>();
foreach (var r in range.GetRanges(pattern, opt))
list.Add(r);
return list;
}