public TextRange FindNext(bool viaF3, bool searchBackward, string messageIfNotFound)
        {
            if (string.IsNullOrEmpty(txtLookFor.Text))
            {
                MessageBox.Show("No string specified to look for!");
                return(null);
            }
            _lastSearchWasBackward     = searchBackward;
            _search.LookFor            = txtLookFor.Text;
            _search.MatchCase          = chkMatchCase.Checked;
            _search.MatchWholeWordOnly = chkMatchWholeWord.Checked;

            var caret = _editor.ActiveTextAreaControl.Caret;

            if (viaF3 && _search.HasScanRegion && !caret.Offset.IsInRange(_search.BeginOffset, _search.EndOffset))
            {
                // user moved outside of the originally selected region
                _search.ClearScanRegion();
                UpdateTitleBar();
            }

            int       startFrom = caret.Offset - (searchBackward ? 1 : 0);
            TextRange range     = _search.FindNext(startFrom, searchBackward, out _lastSearchLoopedAround);

            if (range != null)
            {
                SelectResult(range);
            }
            else if (messageIfNotFound != null)
            {
                MessageBox.Show(messageIfNotFound);
            }
            return(range);
        }
        private void hexViewer1_onSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // in that case, move the selection in the ASM file as well
            Console.WriteLine("Selection in hexviewer: " + e.Offset.ToString("X8"));
            FileInfo fi     = new FileInfo(_motronicFile);
            int      offset = (int)fi.Length;

            if (offset == 0x20000)
            {
                offset = 0x60000;
            }

            int    address      = e.Offset + offset;
            string searchString = "0x" + address.ToString("X8");
            //_findForm.FindNext(true, false, string.Format("Search text «{0}» not found.", searchString));
            TextEditorSearcher _search = new TextEditorSearcher();

            _search.ClearScanRegion();
            _search.Document           = editor.Document;
            _search.LookFor            = searchString;
            _search.MatchCase          = true;
            _search.MatchWholeWordOnly = true;

            var       caret = editor.ActiveTextAreaControl.Caret;
            bool      _lastSearchLoopedAround = false;
            int       startFrom = 0;
            TextRange range     = _search.FindNext(startFrom, false, out _lastSearchLoopedAround);

            if (range != null)
            {
                SelectResult(range);
            }
            editor.Invalidate();
            editor.Refresh();
        }
        private void highlightSelectionToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string LookFor = string.Empty;

            LookFor = editor.ActiveTextAreaControl.TextArea.SelectionManager.SelectedText;

            // if there's text selected, highlight all!
            if (!_highlightGroups.ContainsKey(editor))
            {
                _highlightGroups[editor] = new HighlightGroup(editor);
            }
            HighlightGroup     group   = _highlightGroups[editor];
            TextEditorSearcher _search = new TextEditorSearcher();

            _search.Document = editor.Document;

            group.ClearMarkers();


            _search.LookFor            = LookFor;
            _search.MatchCase          = true;
            _search.MatchWholeWordOnly = true;

            bool looped = false;
            int  offset = 0, count = 0;

            for (; ;)
            {
                TextRange range = _search.FindNext(offset, false, out looped);
                if (range == null || looped)
                {
                    break;
                }
                offset = range.Offset + range.Length;
                count++;

                var m = new TextMarker(range.Offset, range.Length,
                                       TextMarkerType.SolidBlock, Color.Orange, Color.Black);
                group.AddMarker(m);
            }

            editor.Invalidate();
            editor.Refresh();
        }