如何覆盖 TreeNodeCollection.Add(TreeNode)?
How do I override TreeNodeCollection.Add(TreeNode)?
我有这个:
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
方法,这样我就可以 increment/decrement 自定义整数属性,它们是我的 DRT_Tvw_Abstract
class 的一部分同时我Add
一个TreeNode
。我开始尝试从 TreeNodeCollection
class 派生,但这似乎是一个死胡同,因为我无法弄清楚 TreeNodeCollection
[=33] 的有效构造函数是什么=]
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 class Add(TreeNode) 方法的语法是什么?
Add
方法属于 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
方法的class中,首先添加using语句:
using MyExtensions;
然后像正常方法一样使用它:
treeView1.Nodes.Add("One", 1);
我有这个:
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
方法,这样我就可以 increment/decrement 自定义整数属性,它们是我的 DRT_Tvw_Abstract
class 的一部分同时我Add
一个TreeNode
。我开始尝试从 TreeNodeCollection
class 派生,但这似乎是一个死胡同,因为我无法弄清楚 TreeNodeCollection
[=33] 的有效构造函数是什么=]
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 class Add(TreeNode) 方法的语法是什么?
Add
方法属于 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
方法的class中,首先添加using语句:
using MyExtensions;
然后像正常方法一样使用它:
treeView1.Nodes.Add("One", 1);