コード例 #1
0
ファイル: FormMain.cs プロジェクト: cuplexProjects/C-Projects
        private void _formFind_OnSearch(object sender, TextSearchEventArgs eventArgs)
        {
            if (_tabSearchEngine == null)
            {
                _tabSearchEngine = new TabSearchEngine(_tabPageDataCollection);
            }

            try
            {
                var searchProperties = new TextSearchProperties
                {
                    CaseSensitive   = eventArgs.SearchProperties.CaseSensitive,
                    LoopSearch      = eventArgs.SearchProperties.LoopSearch,
                    SearchAllTabs   = eventArgs.SearchProperties.SearchAllTabs,
                    SearchDirection = eventArgs.SearchProperties.SearchDirection,
                    SearchText      = eventArgs.SearchProperties.SearchText
                };

                TextSearchResult searchResult = _tabSearchEngine.GetTextSearchResult(searchProperties);

                if (searchResult.SearchTextFound)
                {
                    _tabSearchEngine.SelectionSetByCode = true;
                    if (searchResult.TabIndex != _tabPageDataCollection.ActiveTabIndex && searchProperties.SearchAllTabs)
                    {
                        _tabPageDataCollection.ActiveTabIndex = searchResult.TabIndex;
                        tabControlNotepad.SelectedIndex       = searchResult.TabIndex;
                    }

                    Focus();
                    RichTextBox textBox = GetRichTextBoxInActiveTab();
                    textBox.SelectionStart  = searchResult.StartPos;
                    textBox.SelectionLength = searchResult.Length;
                    textBox.Focus();
                    _tabSearchEngine.SelectionSetByCode = false;
                }
                else
                {
                    MessageBox.Show(Resources.FormMain__Search_string_not_found, Resources.FormMain__Not_found, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    RichTextBox textBox = GetRichTextBoxInActiveTab();
                    _tabSearchEngine.ResetSearchState(_tabPageDataCollection.ActiveTabIndex, textBox.SelectionStart, textBox.SelectionLength);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex, "Tab Text search function encountered an exception.");
                Log.Error(ex, "Unhandled exception when calling _formFind_OnSearch()");
                MessageBox.Show(ex.Message, Resources.FormMain__ErrorText, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
コード例 #2
0
 private void FormFind_Load(object sender, EventArgs e)
 {
     _textSearchProperties = new TextSearchProperties();
     UpdateControlState();
 }
コード例 #3
0
        public List <TextSearchResult> FindTextInAllTabs(TextSearchProperties searchProperties)
        {
            if (_searchState == null)
            {
                _searchState = new TextSearchState
                {
                    InitialTabIndex = searchProperties.TabIndex,
                    TabIndex        = searchProperties.TabIndex,
                    StartPos        = searchProperties.StartPosition,
                    InitialStartPos = searchProperties.StartPosition,
                    MatchesFound    = 0
                };
            }

            TextSearchResultCollection resultCollection = new TextSearchResultCollection();
            int searchStrLength = searchProperties.SearchText.Length;

            int tabPageIndex = searchProperties.TabIndex;

            for (int i = 0; i < _searchCollection.Count; i++)
            {
                if (tabPageIndex > _searchCollection.Count)
                {
                    tabPageIndex = 0;
                }

                var item = _searchCollection.FirstOrDefault(x => x.TabPageIndex == tabPageIndex);

                if (item != null)
                {
                    int index = -1;

                    while (index > 0)
                    {
                        if (_searchState.StartPos > item.RichTextBox.TextLength)
                        {
                            break;
                        }

                        index = item.RichTextBox.Find(searchProperties.SearchText, _searchState.StartPos, RichTextBoxFinds.None);

                        if (index == -1)
                        {
                            break;
                        }

                        TextSearchResult searchResult = new TextSearchResult {
                            StartPos = index, Length = searchStrLength, TabIndex = tabPageIndex
                        };
                        resultCollection.AddSearchResult(searchResult);

                        _searchState.StartPos = index + searchStrLength;
                    }
                }

                _searchState.StartPos = 0;
                tabPageIndex++;
            }


            return(resultCollection.GetAllSearchResults());
        }