Reputation: 3159
I have this:
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);
}
What I want to do is override
the Add
method so I can increment/decrement custom integer properties that are part of my DRT_Tvw_Abstract
class at the same time I Add
a TreeNode
. I started by trying to derive from the TreeNodeCollection
class, but that seems to be a dead-end because I can't figure out what a valid ctor is for the TreeNodeCollection
class
Nodes
(as in Nodes.Add
) is a property. How do I derive from it so I can override the Add
method? I started by creating an override for this poprperty, but I have no clue as to how you override a method (Add
) from within property override code.
public new virtual TreeNodeCollection Nodes
{
//override the Add method from within here somehow?
get
{
return base.Nodes;
}
set
{
}
}
What is the syntax for overriding the TreeNodeCollection class Add(TreeNode) method?
Upvotes: 2
Views: 1207
Reputation: 125207
Add
method belongs to TreeNodeCollection
class. If you like to have new Add
methods with new signatures:
Naturally you may think about deriving from TreeNodeCollection
and defining new methods and derive from TreeView
and replace its TreeNodeCollection
with your new custom node collection. But don't try this solution. TreeNodeCollection
doesn't have a public constructor. So I'd suggest creating Extension Methods.
The other solution that you may think about it is deriving from TreeView
and adding new Add
methods to the derived TreeView
.
Example - Extension Methods
Create a new code file and copy the following code and paste it in the code file:
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;
}
}
}
Then in the class which you are going to use the new Add
method, first add the using statement:
using MyExtensions;
Then use it like a normal method:
treeView1.Nodes.Add("One", 1);
Upvotes: 4