2010-03-31 39 views
6

Tôi đang cố gắng sao chép các nút treeview thành treenodecollection cho một số quá trình xử lý khác. Khi tôi thực hiện treeview.nodes.clear() trong dòng tiếp theo, treenodecollection của tôi đang trở thành null. Bạn có thể vui lòng cho tôi biết cách sao chép các nút treeview thành treenodecollection và giữ các bản sao của các nút ngay cả sau khi gọi phương thức Clear của các nút xem cây thực tế không?Sao chép sâu các nút xem cây

TreeNodeCollection tnc = null; 
private TypeIn() 
{ 
     tnc = treeView1.Nodes; 
     treeView1.Nodes.Clear(); 
     //Now my tnc becomes null, but I want the tnc for future use. 
} 

Trả lời

3

đối tượng TreeNode là clonable với tất cả toàn bộ cây con. Đó là lý do tại sao bạn có thể sử dụng Danh sách sẽ chứa các nút gốc có các subtrees.

List<TreeNode> tnc = null; 
private TypeIn() 
{ 
     tnc = new List<TreeNode>(); 
     foreach (TreeNode n in treeView1.Nodes) 
     { 
      tnc.Add((TreeNode)n.Clone()); 
     } 
     treeView1.Nodes.Clear(); 

} 
+0

Stremlenye, Cảm ơn. Giải pháp của bạn đã làm việc cho chúng tôi. –

0

Bạn có thể đạt được bản sao sâu bằng cách tuần tự hóa treeView và deserializing nó như là một đối tượng mới.

Có xem xét này: How do you do a deep copy of an object in .NET (C# specifically)?

+0

TreeNodeCollection không serializable – Stremlenye

+0

Hi John, Cảm ơn đã gợi ý. Nhưng, vì đối tượng TreeView không phải là một đối tượng có thể tuần tự hóa, chúng tôi không thể sử dụng đề xuất được cung cấp trong bài viết ở trên. Tôi có thể viết một số hàm revursive để lặp qua tất cả các nút treeview và sao chép các giá trị của các kiểu giá trị cơ bản của một đối tượng Nút để đạt được yêu cầu. Nhưng tôi muốn biết nếu có bất kỳ giải pháp ngắn và thông minh nào có sẵn cho vấn đề này. –

Các vấn đề liên quan