winform treeview 节点过滤

项目中有一个已经绑定好的treeview ,需求是,根据过滤条件A,把不满足条件A的节点过滤掉,如果节点不满足条件,但叶子节点满足条件,该节点保留,节点不满足条件,该节点下的叶子节点也不满足条件,该节点和叶子节点都过滤掉。

算法是:到序遍历每一个树节点(先遍历叶子节点),如果节点是叶子节点,检查条件,不满足移除。

关键代码:

 1         /// <summary>
 2         /// 移除叶子节点
 3         /// </summary>
 4         /// <returns></returns>
 5         private void RemoveNode(TreeNode tn)
 6         {
 7             for (int i = tn.Nodes.Count - 1; i >= 0; i--)
 8             {
 9                 RemoveNode(tn.Nodes[i]);
10             }
11             Task t = tn.Tag as Task;
12             if (!this.FilderCondition(t)&&tn.Nodes.Count==0)
13             {
14                 tn.Remove();
15             }
16         }

遍历树节点:

        private void button1_Click(object sender, EventArgs e)
        {
            for (int i = treeView1.Nodes.Count - 1; i >= 0; i--)
            {
                RemoveNode(treeView1.Nodes[i]);
            }
        }

 Demo下载

原文地址:https://www.cnblogs.com/langhua/p/3079128.html