public bool Find(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(); // if (firstSearch) { startPlace = range.Start; firstSearch = false; } // range.Start = range.End; if (range.Start >= startPlace) { range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); } else { range.End = startPlace; } // foreach (var r in range.GetRangesByLines(pattern, opt)) { tb.Selection.Start = r.Start; tb.Selection.End = r.End; tb.DoSelectionVisible(); tb.Invalidate(); return(true); } if (range.Start >= startPlace && startPlace > Place.Empty) { tb.Selection.Start = new Place(0, 0); return(Find(pattern)); } return(false); }
public virtual void FindPrevious(string pattern) { List <Range> ranges = null; Place end; try { RegexOptions opt = cbMatchCase.Checked ? RegexOptions.None : RegexOptions.IgnoreCase;/*match case*/ if (cbWholeWord.Checked) { pattern = "\\b" + pattern + "\\b";/*match all*/ } // Range range = tb.Selection.Clone(); range.Normalize(); //get count Range rangetmp = range.Clone(); rangetmp.Start = new Place(0, 0); rangetmp.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); int total = rangetmp.GetRangesByLines(pattern, opt).Count(); // end = range.Start; range.Start = new Place(0, 0); range.End = end; // ranges = new List <Range>(range.GetRangesByLines(pattern, opt)); ShowFindInfo(total, total - ranges.Count()); ranges.Reverse(); foreach (Range r in ranges) { tb.Selection = r; tb.DoSelectionVisible(); tb.Invalidate(); return; } // range.Start = range.End; range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); // ranges = new List <Range>(range.GetRangesByLines(pattern, opt)); ShowFindInfo(total, total - ranges.Count()); ranges.Reverse(); foreach (Range r in ranges) { tb.Selection = r; tb.DoSelectionVisible(); tb.Invalidate(); return; } //this.Title = "Not found"; } catch (Exception ex) { //this.Title = ex.Message; } }
public bool Find(string pattern) { try { 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(); //get count Range rangetmp = range.Clone(); rangetmp.Start = new Place(0, 0); rangetmp.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); int total = rangetmp.GetRangesByLines(pattern, opt).Count(); // if (firstSearch) { startPlace = range.Start; firstSearch = false; } // range.Start = range.End; if (range.Start >= startPlace) { range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); } else { range.End = startPlace; } // IEnumerable <Range> ranges = range.GetRangesByLines(pattern, opt); ShowFindInfo(total, total - ranges.Count()); foreach (var r in ranges) { tb.Selection = r; tb.DoSelectionVisible(); tb.Invalidate(); return(true); } // if (range.Start >= startPlace && startPlace > Place.Empty) { tb.Selection.Start = new Place(0, 0); Find(pattern); return(true); } tb.Selection.Start = new Place(0, 0); //this.Title = "Not found"; } catch (Exception ex) { //this.Title = ex.Message; } return(true); }
public virtual void FindNext(string pattern) { try { 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(); // if (firstSearch) { startPlace = range.Start; firstSearch = false; } // range.Start = range.End; if (range.Start >= startPlace) { range.End = new Place(tb.GetLineLength(tb.LinesCount - 1), tb.LinesCount - 1); } else { range.End = startPlace; } // foreach (var r in range.GetRangesByLines(pattern, opt)) { if (r.Start == r.End) { MessageBox.Show("찾는 문자열이 빈 문자열입니다."); return; } tb.Selection = r; tb.DoSelectionVisible(); tb.Invalidate(); return; } // if (range.Start >= startPlace && startPlace > Place.Empty) { tb.Selection.Start = new Place(0, 0); FindNext(pattern); return; } MessageBox.Show("찾을 수 없습니다."); } catch (Exception ex) { MessageBox.Show(ex.Message); } }