private void findDialog1_SearchRequested(object sender, SearchEventArgs e) { if (e.FirstSearch) { this.originalSelectionStart = base.SelectedNode; } TreeNode selectedNode = base.SelectedNode; SBNTreeView.TreeSearchState treeSearchState = SBNTreeView.TreeSearchState.NotStarted; this.SubSearch(e.SearchRegularExpression, base.Nodes, selectedNode, this.originalSelectionStart, ref treeSearchState); if (treeSearchState == SBNTreeView.TreeSearchState.MatchMade) { e.Successful = true; } else if (treeSearchState != SBNTreeView.TreeSearchState.HitEndNode) { e.RestartedFromDocumentTop = true; treeSearchState = SBNTreeView.TreeSearchState.Started; this.SubSearch(e.SearchRegularExpression, base.Nodes, null, this.originalSelectionStart, ref treeSearchState); if (treeSearchState == SBNTreeView.TreeSearchState.MatchMade) { e.Successful = true; } } }
private void SubSearch(Regex regularExpression, TreeNodeCollection treeNodeCollection, TreeNode startAfterNode, TreeNode stopAtNode, ref SBNTreeView.TreeSearchState state) { foreach (TreeNode treeNode in treeNodeCollection) { if (state == SBNTreeView.TreeSearchState.Started) { if (treeNode == stopAtNode) { state = SBNTreeView.TreeSearchState.HitEndNode; break; } if (this.nodeSearcher(treeNode, regularExpression)) { if (base.HideSelection) { this.findDialog1.Deactivate += new EventHandler(this.RestoreHideSelection); base.HideSelection = false; } base.SelectedNode = treeNode; base.SelectedNode.EnsureVisible(); state = SBNTreeView.TreeSearchState.MatchMade; break; } } if (startAfterNode == treeNode) { state = SBNTreeView.TreeSearchState.Started; } this.SubSearch(regularExpression, treeNode.Nodes, startAfterNode, stopAtNode, ref state); if (state == SBNTreeView.TreeSearchState.HitEndNode) { break; } if (state == SBNTreeView.TreeSearchState.MatchMade) { break; } } }