Winform TreeView 查找下一个节点

简介: 转载:http://www.cnblogs.com/Ruiky/archive/2013/02/01/2888674.html public static class TreeViewHelper { private static IEnumerable child...

转载: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
目录
相关文章
WPF TreeView设置所有节点默认展开
WPF TreeView设置所有节点默认展开
|
C#
WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法
1.TreeView选择事件执行两次 Very often, we need to execute some code in SelectedItemChanged depending on the selected TreeViewItem.
1100 0
|
C#
潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据
原文:潜移默化学会WPF(难点控件treeview)--改造TreeView(CheckBox多选择版本),递归绑定数据 目前自己对treeview的感慨很多 今天先讲 面对这种 表结构的数据 的其中一种绑定方法,后面多几列其他属性都没关系,例如多个字段, 1  A  0 2  B  0 3  C  0 4  D  1 5  E  2 6  F  4 7  G 1 .
2280 0
|
C#
WPF—TreeView无限极绑定集合形成树结构
原文:WPF—TreeView无限极绑定集合形成树结构 1.如图所示:绑定树效果图   2.前台Xaml代码:                                                                                          ...
1222 0
|
C#
【C#】wpf查找父子节点
原文:【C#】wpf查找父子节点 using System; using System.Collections.Generic; using System.
827 0
|
搜索推荐 .NET 开发框架