首页 > 代码库 > Winform TreeView 查找下一个节点

Winform TreeView 查找下一个节点

转载:http://www.cnblogs.com/Ruiky/archive/2013/02/01/2888674.html

public static class TreeViewHelper    {        private static IEnumerable<TreeNode> childNodes(this TreeNode node)        {            return node.Nodes.Cast<TreeNode>()                       .SelectMany(x => x.selfAndChildNodes());        }         private static IEnumerable<TreeNode> selfAndChildNodes(this TreeNode node)        {            return new List<TreeNode>() { node }                       .Union(node.Nodes.Cast<TreeNode>()                       .SelectMany(x => x.selfAndChildNodes()));        }         private static IEnumerable<TreeNode> nextNodes(this TreeView tree, TreeNode node)        {            bool after = false;            if (node.Parent == null)                return tree.Nodes.Cast<TreeNode>()                           .Select(x => { bool b = after = after || (node == x); return new { x, b }; })                           .Where(x => x.b && x.x != node)                           .SelectMany(x => new List<TreeNode>() { x.x }.Union(x.x.childNodes()));            else                return node.Parent.Nodes.Cast<TreeNode>()                           .Select(x => { bool b = after = after || (node == x); return new { x, b }; })                           .Where(x => x.b && x.x != node)                           .SelectMany(x => new List<TreeNode>() { x.x }.Union(x.x.childNodes()))                           .Union(tree.nextNodes(node.Parent));        }         public static IEnumerable<TreeNode> NextNodes(this TreeView tree, TreeNode node)        {            if (tree == null || node == null)                return new List<TreeNode>();            return node.childNodes().Union(tree.nextNodes(node));        }         public static IEnumerable<TreeNode> NextNodes(this TreeView tree)        {            if (tree == null || tree.SelectedNode == null)                return new List<TreeNode>();            return tree.NextNodes(tree.SelectedNode);        }    }

  

  如何调用:

var tn = _Tv.NextNodes().FirstOrDefault(x => Regex.IsMatch(x.Text, "(?i)" + txtKey.Text.Trim()));

 if (tn == null)                

    MessageBox.Show("查找完毕");            

else                

_Tv.SelectedNode = tn;

 

public static IEnumerable<TreeNode> TreeWhere(this TreeNodeCollection tds, Func<TreeNode, bool> Fun)        {            foreach (TreeNode item in tds)            {                if (Fun(item))                    yield return item;                var list = item.Nodes.TreeWhere(Fun);                foreach (var item1 in list)                    yield return item1;            }        }

如何调用:

 var tn = treeView1.Nodes.TreeWhere(x => Regex.IsMatch(x.Text, @"(?i)" + txtKey.Text.Trim()));

 
分类: C#,WinForm

Winform TreeView 查找下一个节点