Как переопределить TreeNodeCollection.Add (TreeNode)? - PullRequest
0 голосов
/ 28 июня 2018

У меня есть это:

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 класса, в то же время я Add a TreeNode. Я начал с попытки унаследовать от класса TreeNodeCollection, но это, кажется, тупик, потому что я не могу понять, каков действительный ctor для 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
    {
    }
}

Каков синтаксис для переопределения метода Add (TreeNode) класса TreeNodeCollection?

1 Ответ

0 голосов
/ 28 июня 2018

Add метод относится к классу TreeNodeCollection. Если вам нравятся новые Add методы с новыми сигнатурами:

  • Естественно, вы можете подумать о наследовании от TreeNodeCollection и определении новых методов, а также о TreeView и замене его TreeNodeCollection вашей новой коллекцией пользовательских узлов. Но не пытайтесь использовать это решение. TreeNodeCollection не имеет публичного конструктора. Поэтому я бы предложил создать методы расширения .

  • Другое решение, о котором вы можете подумать, основано на 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...