gpt4 book ai didi

c# - 如何覆盖 TreeNodeCollection.Add(TreeNode)?

转载 作者:行者123 更新时间:2023-11-30 20:25:42 24 4
gpt4 key购买 nike

我有这个:

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

我想做的是覆盖 Add 方法,这样我就可以增加/减少属于我的DRT_Tvw_Abstract 类的自定义整数属性同时我添加一个TreeNode。我开始尝试从 TreeNodeCollection 类派生,但这似乎是一个死胡同,因为我无法弄清楚 TreeNodeCollection 类的有效构造器是什么

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

public new virtual TreeNodeCollection Nodes
{

//override the Add method from within here somehow?

get
{
return base.Nodes;
}

set
{
}
}

覆盖 TreeNodeCollection 类的 Add(TreeNode) 方法的语法是什么?

最佳答案

添加方法属于TreeNodeCollection类(class)。如果您希望使用带有新签名的新 Add 方法:

  • 自然地,您可能会考虑从 TreeNodeCollection 派生并定义新方法,并从 TreeView 派生并将其 TreeNodeCollection 替换为您的新方法自定义节点集合。但是不要尝试这个解决方案。 TreeNodeCollection 没有公共(public)构造函数。所以我建议创建 Extension Methods .

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

示例 - 扩展方法

新建一个代码文件,将以下代码复制粘贴到代码文件中:

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

关于c# - 如何覆盖 TreeNodeCollection.Add(TreeNode)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51089409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com