如何同步树视图

How to synchronize treeviews

我需要一个代码来同步 2 个树视图。我不知道该怎么做。 我正在使用 Visual Studio 2017.

编写程序

有一篇关于它的文章。这里:

Synchronize TreeView

总之你需要一个递归函数:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void LoadTrees()
    {
        // code to initialize the treeviews...
    }

    private void BtnLoadTrees_Click(object sender, EventArgs e)
    {
        LoadTrees();
    }

    private void BtnSync_Click(object sender, EventArgs e)
    {
        SyncronizeTrees();
    }

    private void SyncronizeTrees()
    {
        TreeSyncronizer.SyncTreeNodes(tv1.Nodes, tv2.Nodes);
        TreeSyncronizer.SyncTreeNodes(tv2.Nodes, tv1.Nodes);
    }
}



public class TreeSyncronizer
{
    static public void SyncTreeNodes(TreeNodeCollection source, TreeNodeCollection target)
    {
        foreach (TreeNode node in source)
        {
            TreeNode theNode = SyncNode(node, target);
            SyncTreeNodes(node.Nodes, theNode.Nodes);
        }
    }

    static private TreeNode SyncNode(TreeNode node, TreeNodeCollection tv)
    {
        TreeNode fNode = FindNode(node, tv);
        if (fNode == null)
        {
            fNode = (TreeNode)node.Clone();
            tv.Insert(node.Index, fNode);
        }
        return fNode;
    }

    static private TreeNode FindNode(TreeNode nodeToFind, TreeNodeCollection tv)
    {
        TreeNode[] treeNodes = tv.Cast<TreeNode>().Where(r => r.Text == nodeToFind.Text).ToArray();
        foreach (TreeNode node in treeNodes)
        {
            if (node.Level == nodeToFind.Level)
                return node;
        }
        return null;
    }
}

我建议你阅读这篇文章。