【发布时间】:2009-01-22 13:18:01
【问题描述】:
我想编写一个自定义类,当我在树视图中添加一个节点时,它应该调用一个事件。这样我就可以递归地运行它。
【问题讨论】:
我想编写一个自定义类,当我在树视图中添加一个节点时,它应该调用一个事件。这样我就可以递归地运行它。
【问题讨论】:
我很少使用TreeView,但乍一看这是我的第一印象。由于不能从 TreeViewCollection 继承,您可能必须在新类上创建一个单独的方法,该方法将实际添加到 Nodes 集合中。这将允许您参加一个活动。在你的继承类中是这样的:
public event EventHandler NodeAdded;
public void AddNode(TreeViewNode node)
{
Nodes.Add(node);
if (NodeAdded != null)
{
NodeAdded(this, EventArgs.Empty);
}
}
然后您可以创建一个自定义 EventArgs 类并包含您可能想要使用的任何信息。
【讨论】:
不幸的是,由于 TreeNodeCollection 实际上是一棵树,我认为您将不得不从头开始实现自己的树视图控件,使用带有事件的自定义树数据结构,或者寻找第三方或开源一个使用。
如果它是一个简单的集合,我会说只需将框架 TreeView 控件包装在自定义用户控件中,并隐藏 Nodes 属性,只公开您想要的访问器和修改器。然后,您可以在将调用传递到底层 TreeView 控件之前和/或之后触发控件的事件。但是,这只会在第一层节点上为您提供事件。
使用 mutator 事件创建 List 或 Dictionary 类很容易,因为您可以像这样包装它们。但是树是必须实现的皇家痛苦,特别是如果您要分发或出售使用它的代码。不幸的是,我们基本上没有从 .NET 框架中获得任何帮助。由于实现树形结构的所有复杂性,我会强烈建议尝试找到一个预制的解决方案,第三方或开源。
【讨论】: