代码之家  ›  专栏  ›  技术社区  ›  VA systems engineer

如何重写treenodecollection.add(treenode)?

  •  1
  • VA systems engineer  · 技术社区  · 8 年前

    我有这个:

    public abstract class DRT_Tvw_Abstract : TreeView
    {
        TableCountMetrics metrics;
        public TableCountMetrics Metrics { get => metrics; set => metrics = value; }
    
        public class TableCountMetrics
        {
            int schemaNameCount = 0;
            int tableNameCount = 0;
    
            public int SchemaNameCount { get => schemaNameCount; set => schemaNameCount = value; }
            public int TableNameCount { get => tableNameCount; set => tableNameCount = value; }
        }
    
        public DRT_Tvw_Abstract() : base()
        {
        }
    }
    
    public class DRT_Tvw_TableList_Unfiltered : DRT_Tvw_Abstract
    {
        public DRT_Tvw_TableList_Unfiltered() : base()
        {
        }
    
        public void _CreateTreeView(DataTable dataTable)
        {
            tableListTreeViewNode = new {treeview node from my class that derives from TreeNode}
    
            Nodes.Add(tableListTreeViewNode);       
    }
    

    我想做的是 override 这个 Add 方法,以便我可以递增/递减自定义整数属性,这些属性是 DRT_Tvw_Abstract 同时上课我 添加 TreeNode 是的。我开始尝试从 TreeNodeCollection 类,但这似乎是一个死胡同,因为我无法找出 节点集合

    Nodes (如 Nodes.Add )是一种财产。如何从中派生,以便可以覆盖 添加 方法?我首先为这个poprperty创建了一个重写,但是我不知道如何重写一个方法( 添加 )从属性重写代码中。

    public new virtual TreeNodeCollection Nodes
    {
    
        //override the Add method from within here somehow?
    
        get
        {
            return base.Nodes;
        }
    
        set
        {
        }
    }
    

    重写treenodecollection类add(treenode)方法的语法是什么?

    1 回复  |  直到 8 年前
        1
  •  3
  •   Reza Aghaei    8 年前

    Add 方法属于 TreeNodeCollection 上课。如果你喜欢新的 添加 新签名的方法:

    • 你自然会想到 节点集合 定义新的方法 TreeView 把它换掉 节点集合 使用新的自定义节点集合。但不要尝试这个解决方案。 TreeNodeCollection 没有公共构造函数。所以我建议 extension methods 是的。

    • 你可能会想到的另一个解决方案是 树状视图 添加新的 添加 方法到派生 树状视图 是的。

    示例-扩展方法

    创建新的代码文件并复制以下代码并将其粘贴到代码文件中:

    namespace MyExtensions
    {
        using System.Windows.Forms;
        public static class TreeNodeCollectionExtensions
        {
            //Just an example of a new signature, use the signature that you need instead:
            public static TreeNode Add(this TreeNodeCollection nodes, string text, int tag)
            {
                var node = nodes.Add(text);
                node.Tag = tag;
                return node;
            }
        }
    }
    

    那么在你将要使用新的 添加 方法,首先添加using语句:

    using MyExtensions;
    

    然后像正常方法一样使用它:

    treeView1.Nodes.Add("One", 1);