zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    BAT 批处理 for循环 迟环境变量 [MD]
    adb 环境配置 常用命令 [MD]
    XML 解析 DOM SAX PULL 序列化 总结 [MD]
    instanceof 和 isInstance 强转 类型 class [MD]
    Charles 简介 总结 HTTP 抓包 代理 [MD]
    Permission 运行时权限 总结 翻译 [MD]
    反编译 AndroidKiller 逆向 字节码 实践案例 [MD]
    Gradle 翻译 Analyzer APK文件分析 [MD]
    Java 中 boolean 类型占用多少个字节 [MD]
    Shell 命令行工具 Cmder Babun Zsh [MD]
  • 原文地址:https://www.cnblogs.com/51net/p/5927209.html
Copyright © 2011-2022 走看看