项目中有一个已经绑定好的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]); } }