如何覆盖TreeNodeCollection.Add(TreeNode)?

时间:2018-06-28 18:40:10

标签: c# .net winforms treeview treenodecollection

我有这个:

var fs = require('fs');
var siofu = require("socketio-file-upload");

io.sockets.on('connection', function(socket) {
    var uploader = new siofu();
    var dir = "./public/img/user_images/"
    uploader.dir = dir;
    uploader.listen(socket); //save the file

    uploader.on("saved", function(event){
        fs.rename(dir + event.file.name, dir + socket.id + ".jpg", function(err) { //replace the file name to socket id
            if ( err ) console.log('ERROR: ' + err);
        });
        io.sockets.emit('update photo', {id: socket.id}) //emit to client so it updates the src of the image
    });

});

我想做的是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方法,这样我就可以在我{{1}的同时递增/递减属于Add类的自定义整数属性} DRT_Tvw_Abstract。我首先尝试从Add类派生,但这似乎是死路一条,因为我无法弄清楚TreeNode类的有效ctor是什么

TreeNodeCollection(如TreeNodeCollection)是一个属性。我如何从中派生,以便可以覆盖Nodes方法?我首先创建了此属性的替代项,但是对于如何从属性替代代码中替代方法(Nodes.Add),我一无所知。

Add

重写TreeNodeCollection类的Add(TreeNode)方法的语法是什么?

1 个答案:

答案 0 :(得分:2)

Add方法属于TreeNodeCollection类。如果您希望拥有带有新签名的新Add方法:

  • 自然地,您可能会考虑从TreeNodeCollection派生并定义新方法,然后从TreeView派生并将其TreeNodeCollection替换为新的自定义节点集合。但不要尝试此解决方案。 TreeNodeCollection没有公共的构造函数。因此,我建议创建extension methods

  • 您可能想到的另一种解决方案是从TreeView派生并将新的Add方法添加到派生的TreeView中。

示例-扩展方法

创建一个新的代码文件,然后复制以下代码并将其粘贴到该代码文件中:

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;
        }
    }
}

然后在要使用新的Add方法的类中,首先添加using语句:

using MyExtensions;

然后像普通方法一样使用它:

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