• 【转】排序TreeView的节点


    http://blog.mdk-photo.com/post/C-Extentionmethod-Tree-Node-View-Sort%28%29.aspx

    Extending C# Tree's

    Sunday, 17 August 2008 22:54 by MartinKirk

    Lets say you have a TreeView or a random TreeNode, that you want to present in sorted state. 

    to make it REALLY easy, we just want to call a single method on either object .Sort() -

        TreeView mytree = new TreeView();
        //add nodes
        mytree.Sort();

    this require that we extend each object like this:

        public static void Sort(this TreeView tv)
        {
            TreeNodeCollection T = tv.Nodes.Sort();
            tv.Nodes.Clear();
            tv.Nodes.AddRange(T);
        }

        public static void Sort(this TreeNode tn)
        {
            TreeNodeCollection T = tn.ChildNodes.Sort();
            tn.ChildNodes.Clear();
            tn.ChildNodes.AddRange(T);
        }

    The sorting algorithm itself is ofcause a recursive descent through the nodes:

        public static TreeNodeCollection Sort(this TreeNodeCollection tnc)
        {
            TreeNodeCollection T = new TreeNodeCollection();

            while (tnc.Count > 0)
            {
                string comp = "";
                TreeNode tmp = new TreeNode() ;

                foreach (TreeNode node in tnc)
                {
                    if (node.Text.CompareTo(comp) > 0)
                    {
                        tmp = node;
                        comp = node.Text;
                    }
                }
                T.AddAt(0,tmp);
                tnc.Remove(tmp);
            }

            foreach (TreeNode sub in T)
            {
                sub.Sort();
            }

            return T;
        }

    The AddRange method i use, is also an extension, since these type of collections dont have such neat feature like Generics' collections

        public static void AddRange(this TreeNodeCollection TNC, TreeNodeCollection Col)
        {
            foreach (TreeNode node in Col)
            {
                TNC.Add(node);
            }
        }

    Sorting has never been easier...

    Now lets look at another missing method on Trees/Nodes : Descendants - known from XPath, a method which returns all nodes descendant to the current node:

        public static List<TreeNode> Descendants(this TreeNode node)
        {
            List<TreeNode> list = new List<TreeNode>();
            list.Add(Recurse(node, list));

            return list;
        }

        private static TreeNode Recurse(TreeNode node, List<TreeNode> list)
        {
            foreach (TreeNode sub in node.ChildNodes)
            {
                list.Add(Recurse(sub, list));
            }
            return node;
        }

  • 相关阅读:
    简时——Beta冲刺 Day04
    简时——Beta冲刺 Day03
    简时——Beta冲刺 Day02
    SE_WorkX_提问回顾与个人总结
    通过SQL注入获得网站后台用户密码
    缓冲区溢出攻击与防范
    Pytorch_Part7_模型使用
    Pytorch_Part5_迭代训练
    Pytorch_Part2_数据模块
    Pytorch_Part1_简介&张量
  • 原文地址:https://www.cnblogs.com/ddeef/p/1558824.html
Copyright © 2020-2023  润新知