using Sunny.UI; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Windows.Forms; namespace LB_VisionControl.ScriptEditControl.FastColorTextBox { public partial class FindForm : Form { bool firstSearch = true; Place startPlace; FastColoredTextBox tb; public FindForm(FastColoredTextBox tb) { InitializeComponent(); this.tb = tb; } private void btn_Close_Click(object sender, EventArgs e) { Close(); } public 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)) { 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; } } catch { } } private void txt_Find_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r') { btn_FindNext_Click(null, null); e.Handled = true; return; } if (e.KeyChar == '\x1b') { Hide(); e.Handled = true; return; } } private void FindForm_FormClosing(object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing) { e.Cancel = true; Hide(); } } protected override void OnActivated(EventArgs e) { txt_Find.Focus(); ResetSerach(); } void ResetSerach() { firstSearch = true; } private void cbMatchCase_CheckedChanged(object sender, EventArgs e) { ResetSerach(); } private void cbRegex_CheckedChanged(object sender) { ResetSerach(); } private void cbWholeWord_CheckedChanged(object sender) { ResetSerach(); } private void cbMatchCase_CheckedChanged(object sender) { ResetSerach(); } private void btn_FindNext_Click(object sender, EventArgs e) { FindNext(txt_Find.Text); } } }