【问题标题】:Create an Event Handler whenever a new Node is added in treeview每当在树视图中添加新节点时创建事件处理程序
【发布时间】:2009-01-22 13:18:01
【问题描述】:

我想编写一个自定义类,当我在树视图中添加一个节点时,它应该调用一个事件。这样我就可以递归地运行它。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我很少使用TreeView,但乍一看这是我的第一印象。由于不能从 TreeViewCollection 继承,您可能必须在新类上创建一个单独的方法,该方法将实际添加到 Nodes 集合中。这将允许您参加一个活动。在你的继承类中是这样的:

    public event EventHandler NodeAdded;
    
    public void AddNode(TreeViewNode node)
    {
        Nodes.Add(node);
        if (NodeAdded != null)
        {
            NodeAdded(this, EventArgs.Empty);
        }
    }
    

    然后您可以创建一个自定义 EventArgs 类并包含您可能想要使用的任何信息。

    【讨论】:

    • 没有我知道的 TreeViewCollection 类,密封或其他。有一个TreeNodeCollection,没有密封。
    • 没错,TreeNodeCollection。但是,它不能被继承,我错误地认为是因为它是密封的(应该继续阅读)。我最初的答案是创建一个继承的集合类。 (编辑了我的答案)
    • 啊,我明白了。根据 Reflector,TreeNodeCollection 有一个内部构造函数。所以 MS 希望能够继承它,但阻止其他任何人这样做。
    【解决方案2】:

    不幸的是,由于 TreeNodeCollection 实际上是一棵树,我认为您将不得不从头开始实现自己的树视图控件,使用带有事件的自定义树数据结构,或者寻找第三方或开源一个使用。

    如果它是一个简单的集合,我会说只需将框架 TreeView 控件包装在自定义用户控件中,并隐藏 Nodes 属性,只公开您想要的访问器和修改器。然后,您可以在将调用传递到底层 TreeView 控件之前和/或之后触发控件的事件。但是,这只会在第一层节点上为您提供事件。

    使用 mutator 事件创建 List 或 Dictionary 类很容易,因为您可以像这样包装它们。但是树是必须实现的皇家痛苦,特别是如果您要分发或出售使用它的代码。不幸的是,我们基本上没有从 .NET 框架中获得任何帮助。由于实现树形结构的所有复杂性,我会强烈建议尝试找到一个预制的解决方案,第三方或开源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多