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

时间: 2024-10-25 17:59:30

Winform TreeView 查找下一个节点的相关文章

图片-extjs 搜索框按回车键要高亮到下方模糊查询得到的树的第一个节点,再按回车往下一个节点高亮如何实现

问题描述 extjs 搜索框按回车键要高亮到下方模糊查询得到的树的第一个节点,再按回车往下一个节点高亮如何实现 求高手指点,在线等,我说菜鸟,我不知道怎么获得模糊查询的节点 解决方案 http://www.myexception.cn/h/1202454.html

javascript获取dom的下一个节点方法_javascript技巧

利用javascript 写一个在页面点击加减按钮实现数字的累加. 简略的html大概如此.看得懂就好不要在意这些细节啊 <input type="button" value="+" onclick="jia(this)" /> <label class="num">0</label> <input type="button" value="-"

剑指offer系列之五十七:二叉树的下一个节点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 根据中序遍历的特点,要找到一个节点的下一个节点无非就是三种情况:1.有右子树,这时只需要把其右孩子作为下一个遍历的(并不是要找的)节点,然后沿着该节点的左子树(如果有的话)出发,直到遇到叶子节点,那么该叶子节点就是其下一个要找的节点:2.没有右子树,则判断该节点是否是其父节点的左孩子,如果是则其下一个要找的节点是其父节点:3.如果不是其父节点的左孩子,

TreeView 递归 去 一个节点下 所有 叶子节点的问题,在线等待高人帮忙,急~!

问题描述 我把没用的代码都去掉,核心代码就是下面的,点击树上的某个控件之后,用递归把其下面的所有叶节点全部取出来,但是出了错,在线等待高人解答错在哪里,或者直接告诉我应该怎么取//点击树上的某个节点protectedvoidtvCate_SelectedNodeChanged(objectsender,EventArgse){//利用递归获取他所有的子节点tn=tvCate.getSelectedNode();TreeNodetn2=newTreeNode();getLeafNode(tn,tn

SPOJ 查找下一个回文Palindrome 算法题解

给出一个数值,well,其实不是数值了,而是一大串数字, 比如 98237482340328490328490324893024,非常长的数字. 找出下一个Palindrome,这个Palindrome在数值上要比当前数值大(不能等于). 如: 9 9 9 9->1 0 0 0 1 1 2 3 4 5 ->1 2 4 2 1 本算法时间效率是O(n),其中n是指数值的位数,不是数值,比如123456789,只有9位,那么本算法接近常数: 更多精彩内容:http://www.bianceng.c

对treeModel,根据节点名称如何查找到一个节点,获得该节点

问题描述 没有找到相关API,请教有没有例子,谢谢 解决方案 解决方案二:packagecom.ultrapower.report.common.tree;importjava.io.UnsupportedEncodingException;importjava.net.URI;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.Iterator;importjava.util.List;importjava.uti

winform TreeView树节点上下移动

/// <summary> /// 上移 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsbMoveUp_Click(object sender, EventArgs e) { if (Tv_tree.SelectedNode == null) { Messa

treeview和xml-C# winform中treeView我想新增一个节点,同时这个节点对应的新增一个对象

问题描述 C# winform中treeView我想新增一个节点,同时这个节点对应的新增一个对象 C# winform treeView,2级,第一级是控制卡,控制卡的参数是IP,右边的tabpage可以对参数赋值,第二级是控制卡下面是素材,素材也有几个参数的,tabpage也可以对参数赋值,我想怎么新增一个节点的同时新增一个对象,比如新增控制卡1的节点,就新增一个控制卡1的对象,然后控制卡1的对象下面可以增加素材,我的想法是用一个list,但是不知道类怎么定义,有大牛吗?当然了定义之后可以写在

TreeView 获取一个 节点 下的 所有 叶子节点的问题!

问题描述 选中某一节点后,我需要得到该节点下的所有叶子节点,包括子节点.孙子节点...中的所有叶子节点.做了一晚上都没有弄出来.我是用递归的,结果发现每次点一个节点之后,该节点下的子节点就自动少了一个,希望各位高人协助感激不尽啊!///<summary>///点击树控件///</summary>///<paramname="sender"></param>///<paramname="e"></par