当我在Win Forms应用程序中单击按钮时,我想使用重复的自定义属性来清理我的自定义TreeNode。
例如,我有像这样的TreeNodes,
public class CustomFruitCrateNode : System.Windows.Forms.TreeNode
{
public string FruitName { get; set; }
public bool EatAble{ get; set; }
}
现在,我想清除treeview,以删除所有具有相同FruitName的重复节点,并仅保留一个。
您可以通过两个步骤完成此操作。第一步-从TreeView获取所有节点的列表,即展平TreeView:
private IEnumerable<TreeNode> Flatten(TreeView treeView)
{
Queue<TreeNode> nodes = new Queue<TreeNode>();
foreach (TreeNode node in treeView.Nodes)
nodes.Enqueue(node);
while (nodes.Any())
{
var current = nodes.Dequeue();
foreach (TreeNode subNode in current.Nodes)
nodes.Enqueue(subNode);
yield return current;
}
}
第二步-对节点进行分组并从每个组中删除除第一个节点外的所有节点:
Flatten(treeView1)
.Cast<CustomFruitCrateNode>()
.GroupBy(n => n.FruitName)
.SelectMany(g => g.Skip(1))
.ToList()
.ForEach(n => n.Remove());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句