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()));
Winform TreeView 查找下一个节点的更多相关文章
- C# Winform 按回车键查找下一个可设置焦点的组件
private void frmLogin_KeyPress(object sender, KeyPressEventArgs e) { //按回车键查找下一个可设置焦点的组件. if (e.KeyC ...
- javascript 获取下一个节点
下一个节点: nextElementSibling 上一个节点 previousElementSibling <div> <select onchange="alert(t ...
- 剑指offer-二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 分情况考虑如下: 若该节点为空,则直 ...
- 剑指offer(57)二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目分析 这题一定要画图,因为只有画图我们才能分清楚下 ...
- 【剑指offer】08二叉树的下一个节点,C++实现
原创博文,转载请注明出处! # 题目 父节点指向子节点的指针用实线表示,从子节点指向父节点的指针用虚线表示. # 思路 如果节点有右子节点,则右子节点的最左节点是该节点的下一个节点.例如,寻找b的下一 ...
- javascript 获取dom书的下一个节点。
利用javascript 写一个在页面点击加减按钮实现数字的累加.. 简略的html大概如此.看得懂就好不要在意这些细节啊 <input type="button" valu ...
- 剑指Offer的学习笔记(C#篇)-- 二叉树的下一个节点(好理解版本)
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 一 . 理解题意 该题目我们可以借鉴一个非常影响不好的 ...
- 剑指Offer(书):二叉树的下一个节点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析:若一个节点有右子树,那么他的下一个节点就是他右子树中 ...
- 剑指offer第二版-8.二叉树的下一个节点
描述:给定一棵二叉树和其中的一个节点,找出中序遍历序列的下一个节点.树中应定义指向左节点.右节点.父节点的三个变量. 思路: 1.如果输入的当前节点有右孩子,则它的下一个节点即为该右孩子为根节点的子树 ...
随机推荐
- JSP中setattribute与setParameter的区别
HttpServletRequest类既有getAttribute()方法,也由getParameter()方法,这两个方法有以下区别: (1)HttpServletRequest类有setAttri ...
- javascript学习第三课引用类型object
主要内容: 1.object 是所有类型的基类 实例化对象: 1. var obj = new Object(); 2. var obj = {}; 设置对象属性和方法: obj.name = 'he ...
- C#调用百度地图API经验分享(一)
最近客户提了一个需求,要在网站中添加百度地图的显示,其实原来是有谷歌地图的,但由于谷歌在大陆遭到封杀,只好再给用户增加一个选择了. 下面我将自己最近整理的一些知识分享给大家. 如何使用百度地图API: ...
- 云计算和大数据时代网络技术揭秘(十二)自定义网络SDN
软件定义网络——SDN SDN是网络技术热点,即软件定义网络,OpenFlow是实现SDN思想的一个框架标准, open是指公开.开放,具体为控制平面的规则由各个通信厂家自定义变为公开的技术标准, f ...
- 去除inline-block之间的间隙
在使用display: inline-block;时,这些inline-block之间会有间隙,根据无双 - <去除inline-block元素间的空隙>的说法,这个间隙是4px或者8px ...
- sql行列转换
首先我们建立一张表,名为scoreInfo,各个字段的设计如下图,分别是name,course,score,表示姓名,成绩与分数,如图所示.
- 线状DP(石子归并)
题意:有N堆石子,现要将石子有序的合并成一堆,规定如下:每次只能移动相邻的2堆石子合并,合并花费为新合成的一堆石子的数量.求将这N堆石子合并成一堆的总花费最小(或最大). dp[i][j]为从i到j的 ...
- hdu 4107
Gangster Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 10个经典的C语言面试基础算法及代码
10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...
- module中build.gradle文件参数含义
主要是module的build.gradle,截图如下: 01行:apply plugin: 'com.android.application' 表示该module是这个应用程序的module ...