如何同步树视图
How to synchronize treeviews
我需要一个代码来同步 2 个树视图。我不知道该怎么做。
我正在使用 Visual Studio 2017.
编写程序
有一篇关于它的文章。这里:
总之你需要一个递归函数:
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;
}
}
我建议你阅读这篇文章。
我需要一个代码来同步 2 个树视图。我不知道该怎么做。 我正在使用 Visual Studio 2017.
编写程序有一篇关于它的文章。这里:
总之你需要一个递归函数:
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;
}
}
我建议你阅读这篇文章。