日期:2014-05-17  浏览次数:20858 次

从某一节点开始遍历TreeView
看到论坛一个问这个,随手写一个,使用这段代码,可以实现从TreeView某一个节点开始往后查找。(往前查找我故意不写了,因为只提供思路,不是写给拷贝粘贴党的)程序很简单,主要是给新学C#和LINQ的人一些参考和启发。

效果图


代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    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(