Sae*_*ani 9 c# treeview clone copy
我试图使用以下代码将树视图(完全)的整个树(完全所有节点)复制到另一个树视图:
TreeNodeCollection myTreeNodeCollection = treeView1.Nodes;
TreeNode[] myTreeNodeArray = new TreeNode[treeView1.Nodes.Count];
treeView1.Nodes.CopyTo(myTreeNodeArray, 0);
treeView2.Nodes.AddRange(myTreeNodeArray);
Run Code Online (Sandbox Code Playgroud)
但这不允许我这样做,它要求删除源treeview中的节点或使用它克隆!我怎样才能做到这一点?我不希望我的源treeview在这个过程中丢失任何东西.
**更新**好的我发现了一个复杂的代码(对我来说!!)但是我该如何使用它?
public static T DeepTreeCopy<T>(T obj)
{
object result = null;
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
result = (T)formatter.Deserialize(ms); ms.Close();
}
return (T)result;
}
Run Code Online (Sandbox Code Playgroud)
Mhm*_*hmd 12
试试这个
public void Copy(TreeView treeview1, TreeView treeview2)
{
TreeNode newTn;
foreach (TreeNode tn in treeview1.Nodes)
{
newTn = new TreeNode(tn.Text, tn.Value);
CopyChilds(newTn, tn);
treeview2.Nodes.Add(newTn);
}
}
public void CopyChilds(TreeNode parent, TreeNode willCopied)
{
TreeNode newTn;
foreach (TreeNode tn in willCopied.ChildNodes)
{
newTn = new TreeNode(tn.Text, tn.Value);
parent.ChildNodes.Add(newTn);
}
}
Run Code Online (Sandbox Code Playgroud)
致以我的问候
小智 8
像MohD的答案,但用递归来获取所有节点.(子节点的节点)
public void CopyTreeNodes(TreeView treeview1, TreeView treeview2)
{
TreeNode newTn;
foreach (TreeNode tn in treeview1.Nodes)
{
newTn = new TreeNode(tn.Text, tn.ImageIndex, tn.SelectedImageIndex);
CopyChildren(newTn, tn);
treeview2.Nodes.Add(newTn);
}
}
public void CopyChildren(TreeNode parent, TreeNode original)
{
TreeNode newTn;
foreach (TreeNode tn in original.Nodes)
{
newTn = new TreeNode(tn.Text, tn.ImageIndex, tn.SelectedImageIndex);
parent.Nodes.Add(newTn);
CopyChildren(newTn, tn);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用node.Clone()函数也可以...
foreach (TreeNode node in treeViewSource.Nodes)
{
treeViewTarget.Nodes.Add((TreeNode)node.Clone());
}
Run Code Online (Sandbox Code Playgroud)
添加根节点有助于确保"PlusMinus"功能可见.
TreeNode rootNode = new TreeNode("Root Node");
treeViewTarget.Nodes.Add(rootNode);
foreach (TreeNode node in treeViewSource.Nodes)
{
rootNode.Nodes.Add((TreeNode)node.Clone());
}
rootNode.Expand();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22724 次 |
| 最近记录: |