Làm cách nào để có danh sách tất cả các nút cây (ở tất cả các cấp) trong điều khiển TreeView
?Nhận danh sách tất cả các nút cây (ở tất cả các cấp) trong Điều khiển TreeView
Trả lời
Giả sử bạn có một cây với một nút gốc, mã sau sẽ luôn luôn lặp lại các nút cây xuống sâu nhất, sau đó đi một cấp trở lại và cứ tiếp tục như vậy. Nó sẽ in văn bản của mỗi nút. (chưa được kiểm tra từ đỉnh đầu của tôi)
TreeNode oMainNode = oYourTreeView.Nodes[0];
PrintNodesRecursive(oMainNode);
public void PrintNodesRecursive(TreeNode oParentNode)
{
Console.WriteLine(oParentNode.Text);
// Start recursion on all subnodes.
foreach(TreeNode oSubNode in oParentNode.Nodes)
{
PrintNodesRecursive(oSubNode);
}
}
Update để trả lời Krumelur của (thay thế 2 dòng đầu tiên của/giải pháp của mình với điều này):
foreach (var node in oYourTreeView.Nodes)
{
PrintNodesRecursive(node);
}
Vâng, sau đó nó sẽ nhổ ra tất cả các subtrees nếu có một số rễ. Nhưng thực sự: một cái cây với một vài nút là một thực tế hiếm khi trong tự nhiên :-) Ồ, và nó là "của anh ấy") – Krumelur
Trong thực tế, trong tự nhiên đây là một phaenommena khá phổ biến :) Trong lập trình tôi có thể tưởng tượng một vài kịch bản nơi nó hữu ích. Ví dụ: treeview chứa các phòng ban của một công ty, mỗi phòng có các phân khu và v.v. Bạn có lẽ sẽ không có bất kỳ superdepartment. – dzendras
Bạn nói đúng. Tôi đã điều chỉnh câu trả lời của mình. Là một lỗi đánh máy. – Krumelur
Lazy LINQ cách tiếp cận, chỉ trong trường hợp bạn đang tìm kiếm một cái gì đó như thế này:
private void EnumerateAllNodes()
{
TreeView myTree = ...;
var allNodes = myTree.Nodes
.Cast<TreeNode>()
.SelectMany(GetNodeBranch);
foreach (var treeNode in allNodes)
{
// Do something
}
}
private IEnumerable<TreeNode> GetNodeBranch(TreeNode node)
{
yield return node;
foreach (TreeNode child in node.Nodes)
foreach (var childChild in GetNodeBranch(child))
yield return childChild;
}
Bạn có thể sử dụng hai phương pháp mở rộng đệ quy. Bạn có thể gọi myTreeView.GetAllNodes()
hoặc myTreeNode.GetAllNodes()
:
public static List<TreeNode> GetAllNodes(this TreeView _self)
{
List<TreeNode> result = new List<TreeNode>();
foreach (TreeNode child in _self.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
public static List<TreeNode> GetAllNodes(this TreeNode _self)
{
List<TreeNode> result = new List<TreeNode>();
result.Add(_self);
foreach (TreeNode child in _self.ChildNodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
Vì TreeView có nhiều cấp độ, làm chức năng đệ quy:
public void AddNodeAndChildNodesToList(TreeNode node)
{
listBox1.Items.Add(node.Text); // Adding current nodename to ListBox
foreach (TreeNode actualNode in node.Nodes)
{
AddNodeAndChildNodesToList(actualNode); // recursive call
}
}
Thân gọi chức năng này cho tất cả các nút cấp độ đầu tiên trong TreeView:
foreach (TreeNode actualNode in treeView1.Nodes) // Begin with Nodes from TreeView
{
AddNodeAndChildNodesToList(actualNode);
}
Mã từ trang web C# TreeView
Nếu bạn d không cần chìa khóa nút là duy nhất, chỉ cần đặt tất cả các nút của nút thành một chuỗi trống (""
), sau đó bạn có thể thực hiện Treeview1.Nodes.Find("", true);
để trả về tất cả các nút trong TreeView.
- 1. Truy cập tất cả các nút trong Điều khiển TreeView
- 2. Cách lấy danh sách tất cả các nút con trong TreeView trong .NET
- 3. LINQ: Nhận danh sách tất cả các bảng trong DataContext
- 4. ASP.NET MVC: Nhận tất cả các bộ điều khiển
- 5. Nhận danh sách tất cả các lần bấm với Git
- 6. Cách nhận tất cả các mục khác trong danh sách
- 7. Tìm tất cả các bộ điều khiển trong ứng dụng
- 8. Nhận tất cả các loại thẻ nút
- 9. Liệt kê tất cả các nút con của nút cha trong điều khiển số lần xem trong Visual C#
- 10. Xem danh sách tất cả các biến JavaScript trong Bảng điều khiển Google Chrome
- 11. ExtJs4 cách tắt tất cả các trường và tất cả các nút trên bảng điều khiển đệ quy
- 12. Danh sách tất cả các tệp đang mở
- 13. truy xuất danh sách tất cả các nhãn trong blogger
- 14. Xóa tất cả các mục nhập trong danh sách Redis
- 15. Thu hẹp tất cả các phần tử trong danh sách
- 16. Đặt thuộc tính VerticalAlignment cho tất cả các điều khiển
- 17. SQL Server tất cả các danh sách lỗi?
- 18. Danh sách tất cả các lớp miền trong Grails
- 19. danh sách PHP tất cả các file trong thư mục
- 20. Định dạng tất cả các phần tử trong danh sách
- 21. Chọn tất cả các nút WPF DataGrid
- 22. android dexclassloader lấy danh sách tất cả các lớp
- 23. Danh sách tất cả các máy chủ trên mạng LAN
- 24. Nhận tất cả các kết hợp các cặp từ một danh sách trong Ruby
- 25. Xóa tất cả CSS khỏi các điều khiển telerik
- 26. Xóa tất cả các mục từ một danh sách
- 27. Danh sách tất cả các cam kết git?
- 28. Danh sách tất cả các lỗi PHP có thể
- 29. Cách lấy danh sách tất cả các đối tượng? - PostgreSQL
- 30. Tìm tất cả các nút văn bản
Nếu bạn hài lòng với câu trả lời, nó sẽ tuyệt vời nếu bạn chấp nhận nó. Cảm ơn. – Krumelur