我想写一个自定义类,每当我向treeview添加一个节点时,它应该调用一个事件。这样我就可以递归地运行它。
答案 0 :(得分:1)
我很少使用TreeView,但一眼就看出这是我的第一印象。由于无法继承TreeViewCollection,您可能必须在新类上创建一个单独的方法,该方法将执行实际添加到Nodes集合。这将使您能够参加比赛。在你继承的类中有这样的东西:
public event EventHandler NodeAdded;
public void AddNode(TreeViewNode node)
{
Nodes.Add(node);
if (NodeAdded != null)
{
NodeAdded(this, EventArgs.Empty);
}
}
然后,您可以创建一个自定义的EventArgs类,并包含您可能想要使用的任何信息。
答案 1 :(得分:1)
不幸的是,由于TreeNodeCollection实际上是一棵树,我认为你将需要实际上从头开始实现自己的树视图控件,使用带有事件的自定义树数据结构,或找到第三方或开源使用。
如果它是一个简单的集合,我会说只是将一个框架TreeView控件包装在一个自定义用户控件中,并隐藏Nodes属性,只显示你想要的访问器和mutator。然后,您可以在将调用传递给基础TreeView控件之前和/或之后触发控件的事件。但是,这只会在第一层节点上为您提供事件。
使用mutator事件制作List或Dictionary类很容易,因为你可以像这样包装它们。但树木是必须实施的王室痛苦,特别是如果你要分发或出售使用它的代码。不幸的是,我们从.NET框架中获得的帮助基本上没有。由于实现树结构的所有复杂性,我强烈建议尝试找到预先制定的解决方案,无论是第三方还是开源。